[英]MySQL doesn't respect UNIQUE and PRIMARY-keys
嘿。
首先,我必須說這是我第一次嘗試編寫SQL,這意味着我是n00b。 請耐心點..
現在,我正在嘗試在數據庫中創建一個名為“ push”的表,如下所示:
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和令牌相等,但是它根本不會觸發任何錯誤,它只是插入重復項。
我可能在這里錯過了一些東西,但是我找不到。 我該如何使它返回預期的結果?
謝謝。
這個:
UNIQUE KEY(id, UDID, token));
意味着這3個的組合應該是唯一的。 兩行的id字段(自動遞增)將有所不同,因此它將滿足該規則
如果組合應該是唯一的,請使其不帶id
UNIQUE KEY(UDID, token));
這一點
UNIQUE KEY(id, UDID, token));
確保您始終可以輸入UDID的重復值,並且該值將被接受,因為唯一性測試包括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
如果您希望UDID
和token
都唯一,或者換句話說,不允許兩個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 )
) ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.