2014-10-09 14 views
0

比方說,我在MySQL中創建一個表:MySQL的主鍵應該是INTEGER還是UNSIGNED INTEGER(適當的大小)?

CREATE TABLE animals (
    id INT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (id) 
); 

如果主鍵是簡單INT或者我應該讓UNSIGNED INT?我知道負面的主鍵沒什麼意義,所以我認爲它應該是UNSIGNED INT。儘管哪一個會更快?

+1

爲什麼不呢?如果它是唯一的,那沒關係 – Leo 2014-10-09 23:45:56

+0

@Leo我只是在學習。如果你說沒關係,那麼我會繼續UNSIGNED INT。 :) – bodacydo 2014-10-09 23:47:11

+0

unsigned會給你一個更大的範圍。性能我不知道,但我猜這兩個選項都是相同的 – Leo 2014-10-09 23:52:40

回答

2

您可以完全避免思考它:

CREATE TABLE animals (
    id SERIAL, 
    name CHAR(30) NOT NULL 
); 

(它創建爲一個unsigned int,並且還增加了獨特的指數和自動遞增)

+0

SERIAL是新東西。 TIL。 – bodacydo 2014-10-19 20:54:33

+0

剛纔我發現'SERIAL'是'BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE'的別名。 – bodacydo 2014-10-19 20:55:33

1

我們使用INT UNSIGNEDBIGINT UNSIGNED所有我們的代理主鍵。我們還使用名稱id作爲列。

有一個整數PRIMARY KEY的負值沒有問題(或必然是邪惡的),有符號整數也可以。

需要注意的一個問題是無符號整數:最大值是LARGER比有符號整數的最大值大。 (INT UNSIGNED的最大值是2^32-1,而不是2^31-1。)任何客戶端程序都需要知道這一點;如果值超過2^31-1,將INT UNSIGNED映射爲32位有符號整數(例如C int類型)將成爲問題。

+0

這對於php來說尤其有問題。 – 2014-10-10 00:02:45

1

如果它是自動遞增的,就像它們通常那樣,它應該是無符號的,否則在溢出點你會得到意外的排序。

相關問題