常見DDL語句
DDL語句:Database define language
管理員身份進(jìn)入命令行(commend_line)
mysql -u root -p #啟動(dòng)MySQL數(shù)據(jù)庫(kù),默認(rèn)密碼是root
show databases #展示所有的數(shù)據(jù)庫(kù)
create database db_users #創(chuàng)建名字是db_users的數(shù)據(jù)庫(kù)
use db_users #進(jìn)入db_users數(shù)據(jù)庫(kù)
show tables #展示數(shù)據(jù)庫(kù)所有表
#創(chuàng)建名字是users的數(shù)據(jù)表
create table users(
id int primary key auto_increment, #字段名+類型+約束條件,的形式創(chuàng)建字段
username varchar(225) not null unique,
password varchar(225) not null ,
);
truncate table users # 清空users表中所有記錄
drop users #刪除users表
drop db_users #刪除db_users數(shù)據(jù)庫(kù)
"""
MySQL數(shù)據(jù)庫(kù)創(chuàng)建用戶和刪除用戶
"""
grant all on mytornado.* to "tom"@"%" identified by "tom"; #創(chuàng)建用戶
use mysql; #刪除用戶的第一步,進(jìn)入自帶的mysql數(shù)據(jù)庫(kù)
Delete from user where user=‘tom’ and host=‘%’; #刪除命令
MySQL數(shù)據(jù)庫(kù)的CRUD
# 插入記錄(增) 字段名和值要一一對(duì)應(yīng),id為null前提是創(chuàng)建表時(shí)的約束條件是自增的
insert into users(id,username,password) values (null,"tom","tom");
#刪除記錄(刪) where 后跟條件,滿足條件才會(huì)刪除
delete from users where username="tom";
#更新記錄(改) 刪除和更新操作where條件都是必須存在的
update users username="jerry",password="jerry" where id=1;
#挑選數(shù)據(jù)(查)where條件可選
select * from users [where id=1;]
#alter對(duì)表結(jié)構(gòu)的添加刪除操作
alter table users add sex varchar(50)
alter table users drop sex
MySQL數(shù)據(jù)庫(kù)的各種查詢
1、模糊查詢
#查詢操作條件后加上like+參數(shù),進(jìn)行模糊查詢
select * from users where username like "%tom%" #名字包含'tom'
select * from users where username like "t%" #名字以't'開頭即可
select * from users where username like "tom" # 名字是'tom'的記錄
select * from users where username like "_o%" # 名字第二位是'o'即可
2、分頁查詢
分頁查詢主要使用了limit,當(dāng)使用條件查詢有多個(gè)限制共同存在時(shí),順序是:select-->from-->where-->group by-->order by-->limit
#排序
select * from users order by username;
#分頁查詢前10條數(shù)據(jù)
select * from users limit 0,10;
3、外鍵
一般的關(guān)聯(lián)形式就是外鍵,這是一種一對(duì)多的關(guān)聯(lián)關(guān)系,定義在多的一方,這時(shí)有外鍵的表就被成為子表,另一個(gè)則是父表,這時(shí)存在4種表示關(guān)聯(lián)的強(qiáng)弱關(guān)系:
CASCADE:
在父表上update/delete記錄時(shí),同步update/delete掉子表的匹配記錄
SET NULL:
在父表上update/delete記錄時(shí),將子表上匹配記錄的列設(shè)為null (要注意子表的外鍵列不能為not null)
NO ACTION:
如果子表中有匹配的記錄,則不允許對(duì)父表對(duì)應(yīng)候選鍵進(jìn)行update/delete操作
SET NULL:
父表有變更時(shí),子表將外鍵列設(shè)置成一個(gè)默認(rèn)的值 但I(xiàn)nnodb不能識(shí)別
constraint foreign key (user_id) references users(id); #創(chuàng)建一個(gè)外鍵
4、多表關(guān)聯(lián)查詢
定義兩個(gè)表:
>>>表A >>>表B
id name id hobby
1 tom 1 Football
2 jerry 2 Basketball
3 john 2 Tennis
4 jack 4 Sleep
Ⅰ、內(nèi)鏈接查詢
內(nèi)鏈接(等值鏈接)查詢嚴(yán)格遵循查詢的條件,滿足條件的記錄才會(huì)被查詢到
Select A.Name from A INNER JOIN B ON A.id = B.id
#查詢結(jié)果如下
name hobby
tom Football
jerry Basketball
jerry Tennis
jack Sleep
可以看出john由于沒有滿足條件所以沒有查詢到j(luò)ohn
Ⅱ、外鏈接查詢
MySQL中的外連接,分為左外連接和右連接,即除了返回符合連接條件的結(jié)果之外,還要返回左表(左連接)或者右表(右連接)中不符合連接條件的結(jié)果,相對(duì)應(yīng)的使用NULL對(duì)應(yīng)。
#左鏈接
Select A.Name from A LEFT JOIN B ON A.id = B.id
# 查詢結(jié)果如下
name hobby
tom Football
jerry Basketball
jerry Tennis
john Null
jack Sleep
#右鏈接
Select A.Name from A LEFT JOIN B ON A.id = B.id
#查詢結(jié)果
name hobby
tom Football
jerry Basketball
jerry Tennis
jack Sleep
MySQL事務(wù)
???????MySQL 事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。比如說,在人員管理系統(tǒng)中,你刪除一個(gè)人員,你即需要?jiǎng)h除人員的基本資料,也要?jiǎng)h除和該人員相關(guān)的信息,如信箱,文章等等,這樣,這些數(shù)據(jù)庫(kù)操作語句就構(gòu)成一個(gè)事務(wù)!
???????一般來說,事務(wù)是必須滿足4個(gè)條件(ACID): Atomicity(原子性)、Consistency(穩(wěn)定性)、Isolation(隔離性)、Durability(可靠性)
1、事務(wù)的原子性:一組事務(wù),要么成功;要么撤回。
2、穩(wěn)定性 :有非法數(shù)據(jù)(外鍵約束之類),事務(wù)撤回。
3、隔離性:事務(wù)獨(dú)立運(yùn)行。一個(gè)事務(wù)處理后的結(jié)果,影響了其他事務(wù),那么其他
??????事務(wù)會(huì)撤回。事務(wù)的100%隔離,需要犧牲速度。
4、可靠性:軟、硬件崩潰后,InnoDB數(shù)據(jù)表驅(qū)動(dòng)會(huì)利用日志文件重構(gòu)修改??煽?br> ??????性和高速度不可兼得, innodb_flush_log_at_trx_commit 選項(xiàng) 決定什么時(shí)候把
??????事務(wù)保存到日志里。
MySQL事務(wù)處理的兩種方法:
1、用 BEGIN, ROLLBACK, COMMIT來實(shí)現(xiàn)
??????BEGIN 開始一個(gè)事務(wù)
??????ROLLBACK 事務(wù)回滾
??????COMMIT 事務(wù)確認(rèn)
2、直接用 SET 來改變 MySQL 的自動(dòng)提交模式:
??????SET AUTOCOMMIT=0 禁止自動(dòng)提交
??????SET AUTOCOMMIT=1 開啟自動(dòng)提交
MySQL的幾種鎖
鎖的類型有三種:
共享(S)鎖:多個(gè)事務(wù)可封鎖一個(gè)共享頁;任何事務(wù)都不能修改該頁; 通常是該頁被讀取完畢,S鎖立即被釋放。
排它(X)鎖:僅允許一個(gè)事務(wù)封鎖此頁;其他任何事務(wù)必須等到X鎖被釋放才能對(duì)該頁進(jìn)行訪問;X鎖一直到事務(wù)結(jié)束才能被釋放。
更新(U)鎖:用來預(yù)定要對(duì)此頁施加X鎖,它允許其他事務(wù)讀,但不允許再施加U鎖或X鎖;當(dāng)被讀取的頁將要被更新時(shí),則升級(jí)為X鎖;U鎖一直到事務(wù)結(jié)束時(shí)才能被釋放。
MySQL數(shù)據(jù)庫(kù)調(diào)優(yōu)
常用的方法有:
● 使用鏈接(JOIN)多表關(guān)聯(lián)查詢
● 使用外鍵保證數(shù)據(jù)的關(guān)聯(lián)性
● 使用事務(wù)保證重要事務(wù)的完整性,但是會(huì)降低性能
● 鎖定表某些時(shí)候替代事務(wù),發(fā)揮更高的性能(LOCKTABLE語句)
● 給經(jīng)常使用的字段(頻繁改變的字段)添加索引index
MySQL數(shù)據(jù)庫(kù)常用的方法、事務(wù)和調(diào)優(yōu)都是python在數(shù)據(jù)處理,數(shù)據(jù)爬取,以及web項(xiàng)目開發(fā),甚至機(jī)器學(xué)習(xí)方向必須掌握的技能,學(xué)好數(shù)據(jù)庫(kù)的操作才能掌握數(shù)據(jù),掌控全局23333
