2011-05-22 84 views
0

嘿。
首先,我不得不說這是我第一次嘗試編寫SQL,這意味着我是一個n00b。有一些耐心,請..MySQL不尊重UNIQUE和PRIMARY-KEY

現在,我想創建一個在我的數據庫名爲「推」像這樣的表:

CREATE TABLE push 
(id int NOT NULL AUTO_INCREMENT, 
UDID varchar(40) NOT NULL, 
token varchar(64) NOT NULL, 
lastpost int DEFAULT '0', 
PRIMARY KEY(id), 
UNIQUE KEY(id, UDID, token)); 

這樣的作品,但並不如預期。如果我現在嘗試在這裏插入一些值,像這樣:

INSERT INTO push (UDID, token, lastpost) 
VALUES ('123456789abcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwqyz123456789', 211); 
INSERT INTO push (UDID, token, lastpost) 
VALUES ('123456789abcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwqyz123456789', 211); 

那會,在我眼裏,導致一個錯誤,因爲UDID和令牌是平等的,但它不只是觸發任何錯誤的話,那插入副本。

我可能錯過了這裏的東西,但我找不到什麼。我怎樣才能使這個返回預期的結果?
謝謝。

回答

10

這樣的:

UNIQUE KEY(id, UDID, token)); 

意味着那些3的組合應該是唯一的。 id字段(自動遞增)將是2行不同,所以這將滿足該規則

如果組合應該是唯一的,使其沒有id

UNIQUE KEY(UDID, token)); 
+0

我將如何確保雙方唯一的UDID和令牌? – Emil 2011-05-22 13:23:52

+2

請勿在UNIQUE鍵中傳入'id'。 – 2011-05-22 13:50:22

2

這裏該位

UNIQUE KEY(id, UDID, token)); 

確保您可以隨時爲UDID輸入重複的值,它會被接受作爲測試uniqeness包括ID;其定義爲auto_increment。從這個鍵刪除ID,你應該有檢查你想即

CREATE TABLE push 
(id int NOT NULL AUTO_INCREMENT, 
UDID varchar(40) NOT NULL, 
token varchar(64) NOT NULL, 
lastpost int DEFAULT '0', 
PRIMARY KEY(id), 
UNIQUE KEY(UDID, token)); -- ID now excluded here 
+0

我將如何保證雙方和獨特的UDID和令牌呢? – Emil 2011-05-22 13:21:14

0

如果你想同時UDIDtoken是唯一的,或者換句話說沒有兩個UDID應該允許相同也不兩個令牌應該被允許是一樣的,請嘗試:

CREATE TABLE push 
    (id int NOT NULL AUTO_INCREMENT, 
    UDID varchar(40) NOT NULL, 
    token varchar(64) NOT NULL, 
    lastpost int DEFAULT '0', 
    PRIMARY KEY(id), 
    UNIQUE KEY(UDID), 
    UNIQUE KEY(token) 
) ; 
+0

謝謝:) – Emil 2011-05-22 14:32:57