【发布时间】:2009-11-18 18:03:12
【问题描述】:
使用 MySQL 5
我有一张这样的桌子:
date (varchar)
door (varchar)
shift (varchar)
route (varchar)
trailer (varchar)
+ other fields
此表包含用户生成的内容(从另一个“主”表复制)并防止用户创建超过 1 倍的相同数据,该表具有基于上述指定字段创建的唯一索引。
问题是“重复预防”索引不起作用。
用户仍然可以添加重复记录而不会报告错误。
这个问题是因为我不了解索引的工作原理吗?
或者
是否可能与主键字段(autoincrementing int)冲突?
CREATE TABLE 如下所示:
CREATE TABLE /*!32312 IF NOT EXISTS*/ "tableA" (
"Date" varchar(12) default NULL,
"door" varchar(12) default NULL,
"Shift" varchar(45) default NULL,
"route" varchar(20) default NULL,
"trailer" varchar(45) default NULL,
"fieldA" varchar(45) default NULL,
"fieldB" varchar(45) default NULL,
"fieldC" varchar(45) default NULL,
"id" int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY ("id"),
UNIQUE KEY "duplicate_preventer" ("Date","door","Shift","route","trailer"),
重复的一行是:
date door shift route trailer
10/4/2009 W17 1st Shift TEST-01 NULL
10/4/2009 W17 1st Shift TEST-01 NULL
【问题讨论】:
-
请显示 CREATE TABLE 语句。
-
您能发布几行您认为重复的行吗?
-
您使用的是什么数据库引擎,例如 InnoDB 或 MyISAM?
-
InnoDB 是数据库引擎。重复的行将是:日期、门、班次、路线、拖车 10/4/2009、W17、1st Shift、TEST-01、NULL 10/4/2009、W17、1st Shift、TEST-01、NULL