存儲引擎
mysql提供了多種存儲引擎,最常見的有2種:MyISAM 、InnoDB 。
MyISAM
- 不支持事務、外鍵
- 默認使用表級鎖,不支持行級鎖,併發支持差。讀時自動給表加上讀鎖(也叫作共享鎖),其它事務可以讀、但不能寫,其它事務要執行寫操作需要等待表被釋放;寫時自動給表加上寫鎖(也叫作x鎖、排它鎖),其它事務不能讀、寫,直到表被釋放。
- 支持全文索引,但全文索引一般用ES、Solr,基本不使用mysql的全文索引
MyISAM是5.5之前默認的存儲引擎,適合創建
- 不需要事務、不使用外鍵的表
- 主要進行讀操作的表。由於MyISAM寫時要加表鎖,性能差,所以不適合創建頻繁增刪改的表
InnoDB
- 支持外鍵。mysql的存儲引擎中只有InnoDB支持外鍵
- 支持事務。默認的事務隔離級別是可重複讀
- 默認使用行級鎖,也支持表級鎖,併發支持好。讀時自動給使用的行加讀鎖,寫時自動給使用的行加寫鎖。
InnoDB是mysql5.5及其之後的默認存儲引擎,適合創建
- 需要使用外鍵的表
- 對安全性要求高、要使用事務的表
- 頻繁增刪改的表
mysql常用數據類型
數值型
數據類型 | 描述 |
---|---|
tinyint | -128 ~ 127 |
smallint | 正負3w+ |
mediumint | 正負800w+ |
int | 正負21億+ |
bigint | 正負900千萬億+ |
float | 單精度,4字節,10的-38次方 |
double | 雙精度,8字節,10的-308次方 |
decimal | 定點型 |
整型可以指定最大位數,eg. int(11),不指定默認爲可存儲的最大位數。
浮點型、decimal可以指定總位數、小數位數,eg. double(10,2),最長10位,小數2位(超出會四捨五入),decimal不指定默認爲(10,0)。
float、double有誤差,如果對精度要求很高,比如涉及到錢財,用decimal。
字符串
數據類型 | 最大字節數 |
---|---|
char | 255 |
varchar | 6w+ |
tinytext | 255 |
text | 6w+ |
mediumtext | 1千萬+ |
longtext | 42億+ |
char、varchar可指定字符數,eg. varchar(5) 最多隻能存儲5個字符,其它字符串類型不能指定。
char是定長字符串,內容長度不夠時自動補空格,varchar是變長字符串。
日期時間
數據類型 | 範圍 |
---|---|
date | yyyy-MM-dd,1000-01-01 ~ 9999-12-31 |
datetime | yyyy-MM-dd hh:mm:ss ,1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
timestamp | yyyy-MM-dd hh:mm:ss,1970-01-01 00:00:00 ~ 2038-01-19… |
操作數據庫時,使用的就是上面的格式,eg. timestamp
insert into tb_user (create_time) values ('2019-02-02 09:02:20');
增刪改是這個格式,查詢返回的也是這個格式,注意要引起來。
datetime、timestamp的區別是能表示的範圍不同,datetime 8字節,timestamp 4字節,datetime能表示的範圍更大。
mysql標識符命名規則
mysql標識符標識符包括表名、字段名、數據庫編程中的變量名
- 可包含字母、數字、三個特殊字符(#_$),必須以字母開頭
- 使用多個單詞組成時,單詞之間用下劃線_連接
- 不能使用mysql的關鍵字、保留字