1.資料庫介紹
* 資料庫(DataBase,DB),資料庫用於存放數據的文件系統
* 資料庫軟體系統(DBMS)
* 關係:用二維表描述實體與實體之間聯繫
* 記錄:元組,二維表中一個一行數據
* 欄位:列,屬性,域,二維表中一個一列
* 注意事項:
* 列名必須唯一
* 列沒有順序
* 行沒有順序
2.關係資料庫
* Oracle,oracle公司,資料庫的性能非常好。收費
* DB2,IBM公司,性能不錯。收費
* Sql server ,微軟 IIS
* Mysql,Oracle公司。mysql升級,性能優化
3.Mysql的安裝
* 安裝指定「資料庫文件路徑」 : %mysql%/data
* mysql數據的utf-8編碼為:utf8
* mysql的默認埠:3306
* mysql的超級管理員:root ,安裝只需要給root設置密碼
* %mysql%/my.ini文件
* [mysql]
* default-character-set=utf8 ,默認編碼
* datadir="C:/java/MySQL/MySQL Server 5.5/Data/" ,資料庫文件路徑
4.mysql的登錄
* 前提,必須啟動mysql服務
* windows啟動服務:「運行」 services.msc
* 查詢mysql的命令參數:mysql -? 或 mysql --help
* 設置用戶名
* 格式1:-u用戶名
* 格式2:--user=用戶名
* 設置密碼:
* 格式1:-p密碼
* 格式2:--password=密碼
* 設置主機
* 格式1:-hIP
* 格式2:--host=IP位址
* 設置埠號:
* 格式1:-P埠
* 格式2:--port=埠
* 登錄格式:
* 指定書寫密碼:mysql -uroot -p1234 回車登錄
* 先登錄在書寫密碼:mysql -uroot -p 回車,輸入密碼回車,登錄
5.常用命令
* 顯示所有的資料庫:mysql > show databases;
* 創建資料庫將%mysql%/data創建一個文件夾
* 默認資料庫
* mysql,mysql資料庫的核心資料庫,【不能刪除】
* performance_schema,mysql提供記錄數據的資料庫
* information_schema,視圖,虛擬表
* test,空資料庫
* 使用資料庫:mysql > use 資料庫名稱;
* 對資料庫操作之前必須使用
* 查詢當前資料庫中具有的表:mysql > show tables;
* 確定當前資料庫: mysql > select database();
* 查詢表結構:mysql > desc biaomingc:
* describe
* 查詢資料庫支持的字符集:mysql > show character set;
* 顯示當前系統的環境變量,並且只顯示編碼:mysql > show variables like '%char%';
6.用戶管理
* 創建用戶
* mysql > create user 用戶名稱 [identified by '密碼']
* 用戶名稱的格式:'名稱'@'主機' ,對應user表,'mysql.user'@'mysql.host'
* 主機可以不指定,默認是%,表示所有人都可以訪問
* 創建用戶,就是給mysql資料庫的user表添加記錄
* 查詢用戶表的部分信息
* mysql > select host,user,password from user;
* 例如:
* 添加itcast用戶
* mysql > create user 'itcast'@'192.168.1.100' identified by '1234';
* 修改用戶密碼
* 登錄之後,使用set password進行修改
* mysql > set password for 用戶名稱 = password('1234');
* 刪除用戶l
* 格式:drop user 用戶名稱
* mysql > drop user 'itcast'@'192.168.1.100';
* 設置權限
* 授權格式:grant 權限 on 資料庫.表 用戶名稱 with grant option;
* 權限:all表示所有的權限
* 資料庫.表:*.*所有資料庫的所有表;mysql.*,mysql資料庫的所有表;mysql.user,mysql資料庫的user表
* with grant option:表示當前用戶可以將自己所具有的權限,再次授權給其他人。
* 例如:grant all on *.* to 'demo'@'%' with grant option;
* 取消權限:revoke all privileges ,grant option from 用戶名稱;
* 思考:如果mysql,root用戶的密碼忘記?
* 關閉mysql伺服器(mysqld.ext結束)
* 使用命令啟動mysql伺服器
* cmd > mysqld --console --skip-grant-tables ,可以不使用密碼登錄,之後將可以設置密碼
* 注意:如果set password不能設置,可以使用update
* update user set password = password("1234") where user="root" and host="%"
7.mysql異常
* 伺服器沒有啟動
* ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
* 沒有使用資料庫,及當前資料庫為null
* ERROR 1046 (3D000): No database selected
* 解決辦法:mysql > use 資料庫名;
* 沒有權限
* ERROR 1044 (42000): Access denied for user 'demo'@'%' to database 'mysql'
* 啟動mysql服務:net start mysql
* 發生系統錯誤 3。
* 系統找不到指定的路徑。
* 原因:沒有在添加服務時,將目錄切換到bin目錄下
* win7系統是net無法啟動
* 發生系統錯誤 5。
* 解決辦法:使用超級管理員運行cmd(cmd右鍵)
8.綠色版mysql的安裝
* 解壓mysql-5.5.27-win32.zip
* 複製my-small.ini,並將名稱修改為my.ini
* 通過命令啟動:mysqld --console
* --console 控制臺,將啟動信息列印
* 腳本位置:%mysql%/bin/mysqld.exe
* 需要配置系統環境變量path,任意位置都可以使用腳本
* 將mysql配置成windows系統服務
* 注意:如果要配置系統服務,必須將命令行的目錄切換到%mysql%/bin
* 註冊服務:cmd > mysqld --install
* 移除服務:cmd > mysqld --remove
* 啟動已經成為系統服務服務項(作業系統的命令)
* 啟動服務:cmd > net start mysql
* 停止服務:cmd > net stop mysql
9.sql介紹
* sql : SQL被稱為結構化查詢語言(structured query language)
* SQL分類
* DDL,數據定義語言。(結構)
* 創建:create
* 修改:alter
* 刪除:drop
* DML,數據操縱語言(內容)
* 錄入:insert
* 修改:update
* 刪除:delete
* DQL,數據查詢語言
* 查詢:select
### 資料庫中存放表,表中存放的數據
10.DDL--數據定義語言
* 資料庫(itcast)
* 創建1:mysql > create database 資料庫名稱;
* 創建2:mysql > create database 資料庫名稱 character set 字符集;
* 刪除: mysql > drop database 資料庫名稱;
* 注意:
* 在創建的資料庫目錄中db.opt文件
* default-character-set=latin1 ,資料庫使用的默認編碼為ISO-8859-1,所以不支持中文
* 表(users)
* 注意:先使用資料庫
* 創建:mysql > create table 表名(欄位名稱1 欄位類型1,欄位名稱2 欄位類型2,...);
* 在幫助文檔中可以「data types」
* 創建user表
create table users(
id varchar(32),
username varchar(50),
age int ,
count double(4,1)
);
* 修改表名:alter table 表名 rename 新表名;
* 將表名修改成users
* mysql > alter table user rename users;
* 刪除表: drop table 表名
* 欄位(id,firstname,secondname,age,count)
* 添加 : alter table 表名 add [column] 欄位名稱 欄位類型;
* users表添加一個firstname欄位
* 修改:alter table 表名 change 舊欄位名稱 欄位名稱 欄位類型;
* 將欄位username重新命名為secondname
* 刪除:alter table 表名 drop [column] 欄位名稱
* 類型
* 字符:(java String)
* char(n),定長字符
* varchar(n),變長字符
* 例如:fengjie --> char(10) 將原有數據,再加3個空格 ; varchar(10) 具體數據的長度
* 數字
* int,表示整型
* double(m,n),表示雙精度,m表示所有數字的個數,n表示小數位數。例如:double(5,2), 最大值999.99
* decimal,表示所有的數字
* 約束??
11.DML,數據操縱語言
* 插入數據:insert into 表名[(欄位名稱1,欄位名稱2,...) ] values(值1,值2,。。。);
* 給users表添加一條記錄:u001 張 飛 28 97
* mysql > insert into users values('u001','飛',28,97,'張');
* mysql > insert into users(id,firstname,secondname,age,count) values('u002','張','飛2',85,100);
* mysql > insert into users(id) values('u003');
* 注意:
* 如果使用字符串,數據必須使用引號括起來。建議使用單引號
* 欄位與值必須匹配
* 如果沒有指定欄位,則欄位將使用默認值,默認值null ,不是"null"
* 修改數據: update 表名 set 欄位名稱 = 值 , 欄位名稱2 = 值2 , ... [ where 條件 ]
* 將u003成績修改成20
* mysql > update users set count = 20; # 將所有的程序修改成功20
* mysql > update users set count = 20 where id = 'u003';
* 刪除數據: delete from 表名 [where 條件]
* 刪除u003
* mysql > delete from users where id = 'u003';
* 注意:不要隨意執行 delete from 表名;
12.DQL--數據查詢語言
* 準備數據
* insert into `users`(`id`,`firstname`,`age`,`secondname`,`count`) values ('u001','張',18,'飛',60),('u002','趙',20,'雲',58),('u003','關',22,'羽',80),('u004','劉',25,'備',98),('u006','黃',18,'蓋',NULL),('u005','王',12,'子云',20),('u007','諸葛',24,'亮',100);
* 使用幫助文檔搜索:lock
* 格式:select 欄位1,欄位2,... from 表名 [where 條件]
* 沒有條件查詢
* 查詢所有
* mysql > select * from users;
* mysql > select id,firstname,secondname,age,count from users;
* 查詢部分信息
* mysql > select firstname,secondname from users;
* 查詢用戶編號、姓名,及格(60差值)
* mysql > select id,firstname,secondname ,count from users;
* mysql > select id,firstname,secondname ,count - 60 from users;
* mysql> select id,concat(firstname,secondname) ,count - 60 from users;
* 修改上面查詢顯示欄位名稱,用"姓名"表示姓名,用"及格"表示及格
* 別名:欄位 [as] 別名
* mysql> select id,concat(firstname,secondname) as 姓名 ,count - 60 及格 from users;
* mysql> select id,concat(firstname,secondname) as '姓 名' ,count - 60 '及 格' from users;
* 注意:別名可以不使用引號,但如果別名之間存在空格則必須使用引號
* 帶有條件查詢
* 查詢分數等於60的學生
* mysql > select * from users where count = 60;
* 查詢姓"張"學生
* mysql > select * from users where firstname = '張';
* 查詢年齡大於18的學生
* mysql > select * from users where age > 18;
* 顯示分數在60-80的學生 [60,80]
* mysql > select * from users where count >= 60 and count <= 80;
* mysql > select * from users where count between 60 and 80;
* 查詢編號為u001和u002的學生
* mysql > select * from users where id = 'u001' or id = 'u002';
* mysql > select * from users where id in ('u001','u002');
* 查詢年齡是18或20的學生
* mysql > select * from users where age = 18 or age = 20;
* 查詢名中含有"雲"的學生
* mysql > select * from users where secondname like '%雲%';
* %表示,某一邊字符個數不限定
* 查詢名中第二字還有"雲"的學生
* mysql > select * from users where secondname like '_雲%';
* _表示,一個任意字符
# 添加數據:mysql> update users set secondname='備備雲' where id = 'u004';
* 查詢名中第三字還有"雲"的學生
* mysql > select * from users where secondname like '__雲%';
# 添加數據:mysql> update users set secondname ='%' where id = 'u007';
* 查詢包含%特殊符號
* mysql> select * from users where secondname like '%\%%';
* 注意:可以使用轉義字符\
* 查詢分數小於60 或 大於90分的學生
* mysql> select * from users where count < 60 or count > 90;
* 查詢分數等於60 或者 分數大於90並且年齡大於23
* mysql> select * from users where count = 60 or count > 90 and age > 23;
* mysql> select * from users where count = 60 or ( count > 90 and age > 23 ); #建議使用
* 總結:運算符的優先級, 條件運算符 > and > or
* 查詢沒有考試的學生
* mysql> select * from users where count is null;
* 聚合函數的使用
* 有多少條記錄
* mysql > select count(*) from users;
* mysql > select count(count) from users; # 不計算null值
* mysql > select count(1) from users; # 推薦
* 平均成績
* mysql > select avg(count) from users;
* 注意:
* avg中使用的數字欄位
* 不計算null值
* 數據準確:mysql > select sum(count)/count(1) from users;
* 最高成績
* mysql > select max(count) from users;
* 最小年齡
* mysql > select min(age) from users;
* 班級總成績
* mysql > select sum(count) from users;
* 查詢所有的年齡數
* mysql> select age from users order by age asc ;
* order by用於排序:格式:order by 欄位 asc | desc
* mysql> select distinct age from users order by age asc ;
.
* 分組
* 添加班級欄位(classes)
* mysql> alter table users add column classes varchar(3);
# 添加數據
* update users set classes = '1' where id in ('u001','u002','u003','u004');
* update users set classes = '2' where id in ('u005','u006','u007');
* 查詢1班和2班的平均成績
* 平均成績:select sum(count)/count(1) from users;
* group by進行分組,格式:group by 欄位
* mysql > select sum(count)/count(1) from users group by classes;
* mysql > select sum(count)/count(1) , classes from users group by classes;
* mysql > select sum(count)/count(1) as '平均成績' , classes as '班級' from users group by classes;
* 錯誤數據:mysql > select sum(count)/count(1) as '平均成績' , classes as '班級' ,id from users group by classes;
* 注意:
* 如果使用分組,在select查詢的欄位中,只能使用分組的欄位和聚合函數
* 查詢班級的平均成績為不及格的
select sum(count)/count(1) as avg ,classes from users group by classes having avg <=60
* 分組的條件需要使用having
* mysql > select sum(count)/count(1) , classes from users group by classes having sum(count)/count(1) <=60 ;
* mysql > select sum(count)/count(1) as avg , classes from users group by classes having avg <=60 ;
* 如果不是having
* 錯誤數據:mysql > select sum(count)/count(1) <= 60 , classes from users group by classes ;
+--+----+
| sum(count)/count(1) <= 60 | classes |
+--+----+
| 0 | 1 |
| 1 | 2 |
+--+----+
* 所有的平均成績:select sum(count)/count(1) as avg , classes from users group by classes;
* 虛擬的查詢結果:select * from demo where avg < 60;
* 合併
select * from (select sum(count)/count(1) as avg , classes from users group by classes) as demo where demo.avg < 60;
13.中文處理
* 1.創建資料庫時,指定編號:mysql > create database itcast3 character set UTF8;
* use itcast3;
# 準備表: create table demo(name varchar(30));
# 準備數據:insert into demo values('鳳姐');
* 2.臨時設置編碼:mysql > set names gbk;
* 總結
* 查詢 mysql> show variables like '%char%';
* 1.資料庫必須支持中文 ,character_set_database | utf8
* 2.三個編碼統一,並且需實際客戶端的編碼相同(cmd默認編碼為gbk)
character_set_client | gbk
character_set_connection | gbk
character_set_results | gbk
操作步驟
* 創建資料庫(支持中文)
* 創建表
* 錄入數據
* 查詢