資料類型
int、decimal、varchar、tinytext、text、datetime、timestamp、null(不要機進行運算)
SQL建表
CREATE TABLE `employee` (
`id` INT ( 4 ) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` VARCHAR ( 20 ) NOT NULL COMMENT '名字',
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8
ENGINE = INNODB DEFAULT CHARSET = utf8
資料庫引擎,字元集
COMMENT '注釋'
注釋字段
資料庫引擎比較
MyISAM不能再崩潰後安全恢複
MyISAM | InnoDB |
---|---|
不支援事務 | 支援事務 |
不支援外鍵 | 支援外鍵 |
最小鎖粒度表鎖 | 最小鎖粒度行鎖 |
使用非聚簇索引 | 使用聚簇索引 |
支援全文索引 | 不支援全文索引 |
删除
delete from
自增不會歸零
truncate table
自增歸零
連表查詢
left join on:傳回包括左表中的所有記錄和右表中聯結字段相等的記錄
right join on:傳回包括右表中的所有記錄和左表中聯結字段相等的記錄
inner join on:隻傳回兩個表中聯結字段相等的行
事務
1、通路并可能操作各種資料項的一個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作機關。
2、ACID:
- 原子性:不可分割,要麼都成功,要麼都失敗
- 一緻性:資料前後的總量不變(事務的執行結果必須使資料庫從一個一緻性狀态到另一個一緻性狀态)
- 持久性:事務送出之後對資料庫的更新是持久的,任何事務或系統故障都不會導緻資料丢失
- 隔離性:事務之間互相隔離
- 造成問題:
- 髒讀:一個事務讀取了另一個事務未送出的資料
- 丢失修改:一個事務對資料進行修改,另一個事務也對相同資料進行修改,導緻第一次的修改被覆寫
- 不可重複讀:一個事務對同一資料的讀取結果前後不一緻,讀取已送出資料
- 幻讀:事務範圍查詢資料時,因為其它事務導緻讀取結果前後不一緻,其它事務執行插入資料,且已送出(在一個事務内讀取到其它事務執行的插入操作的資料,導緻前後不一緻)
3、事物的隔離級别:
- READ-UNCOMMITTED讀未送出:解決丢失修改
- READ-COMMITTED讀已送出:解決丢失修改、髒讀
- REPEATABLE-READ可重複讀:解決丢失修改、髒讀、不可重複讀
- SERIALIZABLE串行化:解決丢失修改、髒讀、不可重複讀、幻讀
MySQL InnoDB 存儲引擎的預設支援的隔離級别是 REPEATABLE-READ(可重複讀)。雖然是REPEATABLE-READ,但是使用Next-key Lock鎖隔離的級别達到了SERIALIZABLE
索引
幫助MySql高效擷取資料的資料結構
主鍵索引(PRIMAY KEY)
唯一索引(UNIQUE)
正常索引(INDEX)
全文索引(FULLTEXT)
hash
btree:b+tree
不适用索引的時候我們查找資料必須要周遊,加入了索引比如二叉樹我們可以減少查找的次數
InnoDB使用b+tree,葉子節點存儲的是索引和具體資料
一頁16kb
最好使用整形自增主鍵作為索引,如果不是自增的而是亂序,則會容易造成b+tree的分裂,數的高度增長;如果沒有設定主鍵,InnoDB也會查找沒有重複值的列作為主鍵索引,找不到沒有重複值的列則會建立一個隐藏列row_id作為主鍵索引
b+tree的葉子節點是按照順序存儲的且有雙向指針,是以範圍查詢效率較高
使用聯合索引時對輔助索引排序,不會存儲具體資料,再回表,使用主鍵索引查詢資料