MySQL的有两个不同的UNIQUE约束
问题描述:
INSERT我有一个表创建:MySQL的有两个不同的UNIQUE约束
CREATE TABLE userSessions (
id INTEGER NOT NULL AUTO_INCREMENT,
userId VARCHAR(50) NOT NULL,
startTime TIMESTAMP NULL,
endTime TIMESTAMP NULL,
PRIMARY KEY (id),
INDEX(startTime),
INDEX(endTime),
UNIQUE(userId, startTime),
UNIQUE(userId, endTime)
);
而且我想知道,如果插入行具有重复键,在其约束是重复的,在开始时间或在endTime上。 有谁知道该怎么做?
答
名称的限制:
CREATE TABLE userSessions (
id INTEGER NOT NULL AUTO_INCREMENT,
userId VARCHAR(50) NOT NULL,
startTime TIMESTAMP NULL,
endTime TIMESTAMP NULL,
PRIMARY KEY (id),
INDEX(startTime),
INDEX(endTime),
UNIQUE idxStartTime(userId, startTime),
UNIQUE idxEndTime(userId, endTime)
);
当插入现在失败的错误显然是违反状态,这制约:
#1062 - Duplicate entry 'value' for key 'idxStartTime'
另外值得一提的是,(据我所知)没有除解析错误消息外(取决于服务器版本,格式可能稍有变化)的其他方式获取密钥名称。 – 2013-05-02 12:22:02
诚然,程序员永远不需要知道这一点 - 重复时间戳永远不可能,即使如此,业务逻辑应该在尝试INSERT查询之前检查有效性。 – 2013-05-02 12:26:34
从客户端强制执行该操作可能涉及锁定整个表。根据情况它可能是矫枉过正。有一个API来获取密钥名称有它的用法。 – 2013-05-02 12:31:16