Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当一个字段等于一个值时,Mysql在3个字段上的唯一索引_Mysql_Alter Table_Create Table_Unique Index - Fatal编程技术网

当一个字段等于一个值时,Mysql在3个字段上的唯一索引

当一个字段等于一个值时,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

当其中一个字段为True时,我想在3个字段上添加唯一索引。等于1

已交付的唯一索引包装箱(包装箱id,包装箱id,已交付),其中已交付=1


我需要一个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时才是唯一的,那么请参见我答案中的最后一句话。我知道我现在需要一个触发器,但我不知道它应该是什么样子。此外,我的数据库中已有无法删除的数据。