一、MySQL中id通常使用什么數(shù)據(jù)類型
一般都是 int 自增設(shè)置為主鍵
如果表大的話可以設(shè)置為 龍, 或者big int
例如:
‘id’int unsigned not null auto_increment primary key,
1.SQL PRIMARY KEY 約束
PRIMARY KEY 約束少數(shù)標(biāo)識(shí)數(shù)據(jù)庫表中的每條記錄。
主鍵必須包含少數(shù)的值。
主鍵列不能包含 NULL 值。
每個(gè)表都應(yīng)該有一個(gè)主鍵,并且每個(gè)表只能有一個(gè)主鍵。
2.AUTO_INCREMENT 字段
我們通常希望在每次插入新記錄時(shí),自動(dòng)地創(chuàng)建主鍵字段的值。
我們可以在表中創(chuàng)建一個(gè) auto_increment 字段。
3.unsigned 無符號(hào)整型
mysql數(shù)據(jù)庫中unsigned數(shù)的操作結(jié)果都是unsigned的,select num1 – num2 from table;如果sql_mode不嚴(yán)格此時(shí)的結(jié)果可能是不確定的。sql_mode如果為嚴(yán)格模式則此種操作會(huì)報(bào)越界的異常,解決此問題只需要將參數(shù)sql_mode進(jìn)行如下設(shè)置即可:
mysql> set sql_mode=’NO_UNSIGNED_SUBTRACTION’。
延伸閱讀:
二、id的一些典型的類型
整型:整型通常來說是優(yōu)異的選擇,這是因?yàn)檎偷倪\(yùn)算和比較都很快,而且還可以設(shè)置 AUTO_INCREMENT 屬性自動(dòng)遞增。ENUM 和 SET:通常不會(huì)選擇枚舉和集合作為 id,然后對(duì)于那些包含有“類型”、“狀態(tài)”、“性別”這類型的列來說是挺合適的。例如我們需要有一張表存儲(chǔ)下拉菜單時(shí),通常會(huì)有一個(gè)值和一個(gè)名稱,這個(gè)時(shí)候值使用枚舉作為主鍵也是可以的。字符串:盡可能地避免使用字符串作為 id,一是字符串占據(jù)的空間更大,二是通常會(huì)比整型慢。選用字符串作為 id 時(shí),還需要特別注意 MD5、SHA1和 UUID 這些函數(shù)。每個(gè)值是在很大范圍的隨機(jī)值,沒有次序,這會(huì)導(dǎo)致插入和查詢更慢:插入的時(shí)候,由于建立索引是隨機(jī)位置(會(huì)導(dǎo)致分頁、隨機(jī)磁盤訪問和聚集索引碎片),會(huì)降低插入速度。查詢的時(shí)候,相鄰的數(shù)據(jù)行在磁盤或內(nèi)存上上可能跨度很大,也會(huì)導(dǎo)致速度更慢。如果確實(shí)要使用 UUID 值,應(yīng)當(dāng)移除掉“-”字符,或者是使用 UNHEX 函數(shù)將其轉(zhuǎn)換為16字節(jié)數(shù)字,并使用 BINARY(16)存儲(chǔ)。然后可以使用 HEX 函數(shù)以十六進(jìn)制的方式進(jìn)行獲取。UUID 產(chǎn)生的方法有很多,有些是隨機(jī)分布的,有些是有序的,但是即便是有序的性能也不如整型。