簡體   English   中英

MySQL不尊重UNIQUE和PRIMARY鍵

[英]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

如果您希望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 )
  ) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM