2013-07-23 30 views
-1

当其中一个字段为True时,我想在3个字段中添加一个UNIQUE INDEX。即等于1当一个字段等于某个值时,3个字段上的Mysql UNIQUE INDEX

UNIQUE INDEX pkg_box_delivered(package_id,box_id,delivered)WHERE delivered = 1;

我需要一个Alter语句以及如何将它添加到Create Table语句中。无论其价值只在所有的表中的行 -

+0

要清楚,你想强制执行一个限制,即没有两个记录的'package_id'和'box_id'具有相同的值 - 但只有'deliver = 1'的地方? – eggyal

回答

0

不能创建在在一个表中的行的一些指数。

我需要一个ALTER语句,以及如何将它添加到CREATE TABLE语句

你使用ALTER TABLE来改变现有表的定义,而CREATE TABLE创建表和它的领域,因此,如果表中已经存在....

ALTER TABLE yourtablename 
    ADD UNIQUE INDEX pkg_box_delivered (package_id, box_id, delivered); 

,或者如果它不存在....

CREATE TABLE yourtablename (
     package_id INT NOT NULL, 
     box_id INT NOT NULL, 
     delivered BOOLEAN, 
     ... 
     UNIQUE INDEX pkg_box_delivered (package_id, box_id, delivered) 
); 

正如您不能有选择地将索引应用于某些行一样,您无法选择性地应用唯一约束。你需要添加一个触发器来执行此操作。

+0

谢谢,但我已经知道这些陈述。问题是我只希望那些在交付= 1时是唯一的,但是我不能触发,因为当项目被输入到表格中时我无权访问。 – Avril

+0

我不明白你的意思是“我......希望那些在交付= 1时是唯一的”如果你的意思是这些字段的组合值只有在交付= 1时才是唯一的,那么请参阅我的答案中的最后一句。 – symcbean

+0

我知道我现在需要一个触发器,但我不知道它应该是什么样子。另外我的数据库中已经有了我无法删除的数据。 – Avril

相关问题