由淺入深—MySQL數(shù)據(jù)庫(kù)

常見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

畫師忘了QAQ
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容