MySQL服務(wù)啟動(dòng)
命令提示符:
net start mysql:?jiǎn)?dòng)mysql服務(wù)
net stop mysql: 關(guān)閉mysql服務(wù)
MySQL登錄
1.mysql -uroot
2.mysql -hip(ip為連接目標(biāo)的IP地址) -root -p連接目標(biāo)的密碼
3.mysql --host=ip --user=root --password=連接目標(biāo)的密碼
SQL
1.SQL(structured query language):結(jié)構(gòu)化查詢語(yǔ)言
2.SQL通用語(yǔ)法:
1)以分號(hào)為結(jié)尾
2)不區(qū)分大小寫。關(guān)鍵字建議大寫
3)注釋: 單行:--
多行:/*注釋*/
3.SQL分類
1)DDL(Data Definition Language數(shù)據(jù)定義語(yǔ)言):用來(lái)定義數(shù)據(jù)庫(kù)對(duì)象:數(shù)據(jù)庫(kù)、表念颈、列等娱节。關(guān)鍵字:create衰琐、alter吗垮、drop葫盼。
2)DML(Data manipulation language數(shù)據(jù)操作語(yǔ)言):用來(lái)對(duì)數(shù)據(jù)庫(kù)中表的數(shù)據(jù)進(jìn)行增刪改蛋勺。關(guān)鍵字:insert瓦灶、delete、update抱完。
3)DQL(Data query language數(shù)據(jù)查詢語(yǔ)言):用來(lái)查詢數(shù)據(jù)庫(kù)中表的記錄(數(shù)據(jù))贼陶。關(guān)鍵字:select,where等。
4)DCL(Data control language數(shù)據(jù)控制語(yǔ)言(了解)):用來(lái)定義數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限和安全級(jí)別碉怔,及創(chuàng)建用戶烘贴。關(guān)鍵字:grant、revoke等撮胧。
DDL:操作數(shù)據(jù)庫(kù)桨踪、表
1.操作數(shù)據(jù)庫(kù):CRUD
1)C(Create):創(chuàng)建
創(chuàng)建數(shù)據(jù)庫(kù)
create database (if not exists)數(shù)據(jù)庫(kù)名稱
創(chuàng)建數(shù)據(jù)庫(kù)并設(shè)置字符集
create database (if not exists)數(shù)據(jù)庫(kù)名稱 character set 字符集名稱
2)R(Retrieve)查詢:
查詢所有數(shù)據(jù)庫(kù)的名稱:
show database;
查詢某個(gè)數(shù)據(jù)庫(kù)的字符集;查詢某個(gè)數(shù)據(jù)庫(kù)的創(chuàng)建語(yǔ)句
show create database 數(shù)據(jù)庫(kù)名稱;
3)U(Update)修改:
修改數(shù)據(jù)庫(kù)的字符集:
alter database 數(shù)據(jù)庫(kù)名稱 character set 字符集名稱;
4)D(Delete)刪除:
刪除數(shù)據(jù)庫(kù):
drop database (if exists)數(shù)據(jù)庫(kù)名稱;
5)使用數(shù)據(jù)庫(kù):
查詢當(dāng)前正在使用的數(shù)據(jù)庫(kù)名稱:
select database();
使用數(shù)據(jù)庫(kù):
use 數(shù)據(jù)庫(kù)名稱;
2.操作表
1)C(Create):創(chuàng)建
create table 表名(
列名1 數(shù)據(jù)類型1,
列名2 數(shù)據(jù)類型2,
.....
列名n 數(shù)據(jù)類型n
);
復(fù)制表
create table 表名 like 被復(fù)制的表名;
2)R(Retrieve)查詢:
查詢某個(gè)數(shù)據(jù)庫(kù)中所有的表名稱:
show tables;
查詢表結(jié)構(gòu)
desc 表名;
3)U(Update)修改:
①修改表名
alter table 表名 rename to 新的表名;
②修改表的字符集
alter table 表名 character set 字符集名稱;
③添加一列
alter table 表名 add 列名 數(shù)據(jù)類型;
④修改列名稱 類型
alter table 表名 change 列名 新列明 新數(shù)據(jù)類型;
alter table 表名 modify 列名 新數(shù)據(jù)類型;
⑤刪除列
alter table 表名 drop 列名;
4)D(Delete)刪除:
drop table (if exists) 表名;
DML:增刪改表中數(shù)據(jù)
1.添加數(shù)據(jù):
insert into 表名 (列1,列2,...列n) values(值1,值2,...值n);
insert into 表名 values(值1,值2,...值n);
注:除了數(shù)字類型芹啥,其他類型需要使用引號(hào)' '或" "
2.刪除數(shù)據(jù):
delect from 表名 where 條件;
注:
delect from 表名; --不推薦使用锻离,會(huì)刪除所有數(shù)據(jù)
truncate table 表名; --推薦使用,效率更高墓怀,先刪除表汽纠,然后再創(chuàng)建一張一樣的表。
3.修改數(shù)據(jù):
update 表名 set 列名1=值1, 列名2=值2, ...where 條件;
DQL:查詢表中的記錄
select * from 表名;
1.基本語(yǔ)法
select 列名 from 表名 where 條件
group by 分組
having 分組之后的條件
order by 排序
limit 分頁(yè)限定
2.基礎(chǔ)查詢
1)去除重復(fù):distinct
2)計(jì)算列
①用四則運(yùn)算
②null參與的運(yùn)算傀履,計(jì)算結(jié)果都為null虱朵。這時(shí)可能需要用ifnull(出現(xiàn)null的列名,替換值)
3)起別名:as 列名別名(as 可以省略)
3.條件查詢
1)where 條件
2)運(yùn)算符
-- >、<啤呼、<=卧秘、>=、=官扣、<>
-- between... and
-- in
-- like:模糊查詢
占位符:
_ 單個(gè)任意字符
& 多個(gè)任意字符
-- is null
-- and 或 &&
-- or 或 ||
-- not 或 翅敌!
DQL:查詢語(yǔ)句
1.排序查詢
order by 排序字段1 排序方式1,排序字段2 排序方式2,...
排序方式:
ASC:升序,默認(rèn)
DESC:降序惕蹄。
注:如果有多個(gè)排序條件蚯涮,則前一個(gè)排序值一樣時(shí),才會(huì)判斷第二條件卖陵。
2.聚合函數(shù):將一列數(shù)據(jù)作為一個(gè)整體遭顶,進(jìn)行縱向的計(jì)算。
1)count:計(jì)算個(gè)數(shù)
2)max泪蔫、min棒旗、sum、avg
注:聚合函數(shù)的計(jì)算撩荣,排除null值
3.分組查詢:
1)語(yǔ)法:group by 分組列名;
2)注意:
where和having的區(qū)別:
1.where在分組之前進(jìn)行限定铣揉,如果不滿足條件,則不參與分組餐曹。having在分組之后進(jìn)行限定逛拱,如果不滿足結(jié)果,則不會(huì)被查詢出來(lái)台猴。
2.where后不可以跟聚合函數(shù)朽合,having可以進(jìn)行聚合函數(shù)的判斷俱两。
4.分頁(yè)查詢:
1.語(yǔ)法:limit 開始的索引,每頁(yè)查詢的條數(shù);
2.公式:開始的索引=(當(dāng)前的頁(yè)碼-1)*每頁(yè)顯示的條數(shù)
約束
分類
1.主鍵約束:primary key
2.非空約束:not null
3.唯一約束:unique
4.外鍵約束:foreign key
1)非空約束:not null
1.創(chuàng)建表(省略)
2.表已存在,添加非空約束
alter table 表名 modify name 數(shù)據(jù)類型 not null;
3.刪除某列的非空約束
alter table 表名 modify name 數(shù)據(jù)類型;
2)唯一約束:unique曹步,某一列的值不能重復(fù)
1.唯一約束的列的值可以有多個(gè)null值
2.刪除唯一約束
alter table 表名 drop index 列名;
3.表已存在宪彩,添加唯一約束
alter table 表名 modify 列名 數(shù)據(jù)類型 unique;
3)主鍵約束:primary key
1.注意:
1)非空且唯一
2)一張表只能有一個(gè)字段為主鍵
2.刪除主鍵
alter table 表名 drop primary key;
3.添加主鍵
alter table 表名 modify 列名 數(shù)據(jù)類型 primary key;
4.自動(dòng)增長(zhǎng)
①創(chuàng)建表時(shí),添加主鍵約束讲婚,并且完成主鍵增長(zhǎng)
create table stu(
id int primary key auto_increament
);
②刪除自動(dòng)增長(zhǎng)
alter table 表名 modify 列名 數(shù)據(jù)類型;
③添加自動(dòng)增長(zhǎng)
alter table 表名 modify 列名 數(shù)據(jù)類型 auto_increament;
4)外鍵約束:foreign key
1.創(chuàng)建表:
create table 表名(
....
外鍵列
constraint 外鍵名稱 foreign key (外鍵列名稱)references 主表名稱(主表列名稱)
);
2.刪除外鍵:
alter table 表名 drop foreign key;
3.添加外鍵:
alter table 表名 add constraint 外鍵名稱 (外鍵列名稱)foreign key references 主表名稱(主表列名稱) ;
4.級(jí)聯(lián)操作
1.添加級(jí)聯(lián)操作
alter table 表名 add constraint 外鍵名稱 (外鍵列名稱)foreign key references 主表名稱(主表列名稱)on update cascade on delete cascade ;
2.分類:
1)級(jí)聯(lián)更新:on update cascade
2)級(jí)聯(lián)刪除:on delete cascade
數(shù)據(jù)庫(kù)設(shè)計(jì)
1.多表之間的關(guān)系
分類:一對(duì)一(了解)毯焕、一對(duì)多、多對(duì)多
2.實(shí)現(xiàn)關(guān)系
1)一對(duì)多:在多的一方建立外鍵磺樱,指向一的一方的主鍵纳猫。
2)多對(duì)多:多對(duì)多關(guān)系實(shí)現(xiàn)需要借助第三張中間表,中間表至少包含兩個(gè)字段竹捉,這兩個(gè)字段作為第三張表的外鍵芜辕,分別指向兩張表的主鍵。
3)一對(duì)一:可以在任意一方添加唯一外鍵指向另一方的主鍵块差。
3.數(shù)據(jù)庫(kù)設(shè)計(jì)的范式
分類:
1.第一范式(1NF):每一列都是不可分割的原子數(shù)據(jù)項(xiàng)
2.第二范式(2NF):在1NF的基礎(chǔ)上侵续,非碼屬性必須完全依賴于碼(在1NF的基礎(chǔ)上消除非主屬性對(duì)主碼的部分函數(shù)依賴)
1)函數(shù)依賴:A→B,如果通過(guò)A屬性(屬性組)的值,可以確定唯一B屬性的值,則稱B依賴于A救拉。
2)完全函數(shù)依賴:A→B笙瑟,如果A是一個(gè)屬性組众弓,則B屬性值的確定需要依賴于A屬性組中所有的屬性值。
3)部分函數(shù)依賴:A→B,如果A是一個(gè)屬性組,則B屬性值的確定只需要依賴于A屬性組中某一些值即可缸血。
4)傳遞函數(shù)依賴:A→B,B→C械筛,如果通過(guò)A屬性(屬性組)的值捎泻,可以確定唯一B屬性的值,在通過(guò)B屬性(屬性組)的值可以確定唯一C屬性的值埋哟,則稱C傳遞函數(shù)依賴于A笆豁。
5)碼:如果在一張表中,一個(gè)屬性或?qū)傩越M赤赊,被其他所有屬性所完全依賴闯狱,則稱這個(gè)屬性(屬性組)為該表的碼。
注:
主屬性:碼屬性組中的所有屬性砍鸠。
非主屬性:除了碼屬性組的屬性扩氢。
3.第三范式(3NF):在2NF基礎(chǔ)上耕驰,任何非主屬性不依賴于其他非主屬性(在2NF基礎(chǔ)上消除傳遞依賴)
數(shù)據(jù)庫(kù)的備份和還原
法一:命令行:
語(yǔ)法:
備份:mysqldump -u用戶名 -p密碼 >保存路徑
還原:
1.登錄數(shù)據(jù)庫(kù)
2.創(chuàng)建數(shù)據(jù)庫(kù)
3.使用數(shù)據(jù)庫(kù)
4.執(zhí)行文件爷辱。source 文件路徑
法二:圖形化工具SQLyog
多表查詢
多表查詢的分類
1.內(nèi)連接查詢:
1)隱式內(nèi)連接:使用where條件消除無(wú)用數(shù)據(jù)
select 列名 from 表名 where ...
2)顯式內(nèi)連接:
select 字段列表 from 表名1 [inner] join 表名2 on 條件;
2外連接查詢:
1)左外連接:查詢的是左表所有數(shù)據(jù)及其交集部分
select 字段列表 from 表1 left join 表2 on 條件;
2)右外連接:查詢的是右表所有數(shù)據(jù)及其交集部分
select 字段列表 from 表1 right join 表2 on 條件;
3)子查詢:
子查詢的不同情況:
1.子查詢的結(jié)果是單行單列的:子查詢可作為條件,使用運(yùn)算符(> >= < <= =)去判斷。
2.子查詢的結(jié)果是多行單列的:子查詢可作為條件饭弓,使用運(yùn)算符in來(lái)判斷双饥。
3.子查詢的結(jié)果是多行多列的:子查詢可作為一張?zhí)摂M表參與查詢。
事務(wù)
1.事務(wù)的基本介紹
1)概念:如果一個(gè)包含多個(gè)步驟的業(yè)務(wù)操作弟断,被事務(wù)管理咏花,那么這些操作要么同時(shí)成功,要么同時(shí)失敗阀趴。
2)操作:
①開啟事務(wù):start transaction;
②回滾:rollback;
③提交:commit;
3)MySQL數(shù)據(jù)庫(kù)中事務(wù)默認(rèn)自動(dòng)提交
事務(wù)提交的兩種方式:
①自動(dòng)提交:
mysql默認(rèn)自動(dòng)提交事務(wù)
一條DML語(yǔ)句會(huì)自動(dòng)提交一次事務(wù)昏翰。
②手動(dòng)提交:
oracle數(shù)據(jù)庫(kù)默認(rèn)手動(dòng)提交事務(wù)
需要先開啟事務(wù),在提交
③ 修改事務(wù)的默認(rèn)提交方式:
查看事務(wù)的默認(rèn)提交方式:select @@autocommit;
1代表自動(dòng)提交 0代表手動(dòng)提交
修改默認(rèn)提交方式:set @@autocommit=0;
2事務(wù)的四大特征:
1)原子性:是不可分割的最小操作單位刘急,要么同時(shí)成功棚菊,要么同時(shí)失敗。
2)持久性:當(dāng)事務(wù)提交或回滾后叔汁,數(shù)據(jù)庫(kù)會(huì)持久化的保存數(shù)據(jù)统求。
3)隔離性:多個(gè)事務(wù)之間,相互獨(dú)立据块。
4)一致性:事務(wù)操作前后码邻,數(shù)據(jù)總量不變。
3.事務(wù)的隔離級(jí)別
1)概念:多個(gè)事務(wù)之間另假,相互獨(dú)立像屋。但是如果多個(gè)事務(wù)操作同一批數(shù)據(jù),則會(huì)引發(fā)一些問(wèn)題边篮,設(shè)置不同的隔離級(jí)別就可以解決這些問(wèn)題
2)存在問(wèn)題:
①臟讀:一個(gè)事務(wù)开睡,讀取到另一個(gè)事務(wù)中沒(méi)有提交的數(shù)據(jù)。
②不可重復(fù)讀(虛讀):在同一事務(wù)中苟耻,兩次讀取到的數(shù)據(jù)不一樣篇恒。
③幻讀:一個(gè)事務(wù)操作(DML)數(shù)據(jù)表中的所有記錄,另一個(gè)事務(wù)添加一條數(shù)據(jù)凶杖,則第一個(gè)事務(wù)查詢不到自己的修改胁艰。
3)隔離級(jí)別:
①read uncommitted:讀未提交
產(chǎn)生的問(wèn)題:臟讀、不可重復(fù)讀智蝠、幻讀
②read committed:讀已提交(oracle默認(rèn))
產(chǎn)生的問(wèn)題:不可重復(fù)讀腾么、幻讀
③repeatable read:可重復(fù)讀(MySQL默認(rèn))
產(chǎn)生的問(wèn)題:幻讀
④serializable:串行化
可以解決所有問(wèn)題
注意:隔離級(jí)別從小到大安全性越來(lái)越高,但是效率越來(lái)越低杈湾。
數(shù)據(jù)庫(kù)查詢隔離級(jí)別:
select @@tx_isolation;
數(shù)據(jù)庫(kù)設(shè)置隔離級(jí)別:
set global transaction isolation level 級(jí)別字符串解虱;
DCL:管理用戶,授權(quán)
1.管理用戶
1)添加用戶
create user '用戶名'@'主機(jī)名' identified by '密碼';
2)刪除用戶
drop user '用戶名'@'主機(jī)名';
3)修改用戶密碼
update user set password =password('新密碼') where user='用戶名';
或
set password for '用戶名'@'主機(jī)名'=password('新密碼');
注意:mysql中忘記了root用戶的密碼漆撞?
1.以管理員用戶運(yùn)行cmd→net stop mysql 停止sql服務(wù)
2.使用無(wú)驗(yàn)證方式啟動(dòng)sql服務(wù):mysqld --skip-grant-tables
3.打開新的cmd窗口殴泰,直接輸入mysql命令于宙,敲回車。就可登錄成功
4.use mysql悍汛;
5.update user set password =password('新密碼') where user ='root';
6.關(guān)閉兩個(gè)窗口
7.打開任務(wù)管理器捞魁,手動(dòng)結(jié)束mysqld.exe的進(jìn)程
8.啟動(dòng)mysql服務(wù)
9.使用新密碼登錄
4)查詢用戶:
1.切換到mysql數(shù)據(jù)庫(kù)
use mysql;
2.查詢user表
select * from user;
注:通配符:%表示可以在任意主機(jī)使用用戶登記數(shù)據(jù)庫(kù)
2.權(quán)限管理:
1)查詢權(quán)限:
show grants for '用戶名'@'主機(jī)名';
2)授予權(quán)限:
grant 權(quán)限列表 on 數(shù)據(jù)庫(kù)名.表名 to '用戶名'@'主機(jī)名';
若授予所有權(quán)限
grant all on *.* to '用戶名'@'主機(jī)名';
3)撤銷權(quán)限:
revoke 權(quán)限列表 on 數(shù)據(jù)庫(kù)名.表名 from '用戶名'@'主機(jī)名';