嘿。
首先,我不得不说这是我第一次尝试编写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和令牌相同,但它根本不会触发任何错误,只是插入副本。
我可能在这里遗漏了一些东西,但我找不到什么。如何使此返回预期结果?
感谢。
答案 0 :(得分:10)
这样:
UNIQUE KEY(id, UDID, token));
意味着这三者的组合应该是唯一的。对于2行,id字段(自动递增)将是不同的,因此它将满足该规则
如果组合应该是唯一的,请在没有id
UNIQUE KEY(UDID, token));
答案 1 :(得分: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
答案 2 :(得分:0)
如果您希望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 )
) ;