当一个字段等于一个值时,Mysql在3个字段上的唯一索引
当其中一个字段为True时,我想在3个字段上添加唯一索引。等于1 已交付的唯一索引包装箱(包装箱id,包装箱id,已交付),其中已交付=1当一个字段等于一个值时,Mysql在3个字段上的唯一索引,mysql,alter-table,create-table,unique-index,Mysql,Alter Table,Create Table,Unique Index,当其中一个字段为True时,我想在3个字段上添加唯一索引。等于1 已交付的唯一索引包装箱(包装箱id,包装箱id,已交付),其中已交付=1 我需要一个Alter语句,以及如何将其添加到CREATETABLE语句中。您不能在表中的某些行上创建索引-只能在表中的所有行上创建索引,而不管值如何 我需要一个Alter语句,以及如何将它添加到CREATETABLE语句中 您可以使用ALTER TABLE更改现有表的定义,而CREATE TABLE创建一个表及其字段,因此如果该表已经存在 ALTER TA
我需要一个Alter语句,以及如何将其添加到CREATETABLE语句中。您不能在表中的某些行上创建索引-只能在表中的所有行上创建索引,而不管值如何 我需要一个Alter语句,以及如何将它添加到CREATETABLE语句中 您可以使用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)
);
正如不能对某些行选择性地应用索引一样,也不能选择性地应用唯一约束。您需要添加一个触发器来强制执行此操作。要明确,您需要强制执行一个约束,即没有两个记录具有相同的
package\u id
和box\u id
-值,但仅限于delivered=1
?谢谢,但我已经知道了这些语句。问题是,我只希望在交付=1时这些项是唯一的,但我不能使用触发器,因为我无法访问项目何时输入到表中。我不明白“我…希望在交付=1时这些项是唯一的”是什么意思如果您的意思是,字段的组合值只有在交付=1时才是唯一的,那么请参见我答案中的最后一句话。我知道我现在需要一个触发器,但我不知道它应该是什么样子。此外,我的数据库中已有无法删除的数据。