MySQL 存儲引擎、數據類型


 

存儲引擎

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的關鍵字、保留字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章