我有一张桌子,如下:
mysql>描述组;
+--------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| jobId | int(11) | NO | MUL | NULL | |
| name | varchar(45) | YES | | NULL | |
| notes | varchar(1024) | YES | | | |
| main | tinyint(1) | NO | | 0 | |
+--------------------+---------------+------+-----+---------+----------------+
还有另一个与作业无关的表,此处不相关。这是“子”表,作业为1:n。我只需要这些组之一。
因此,作业将具有多个“组”条目;我希望这样,对于一项特定工作,只能将其中一个设置为“ 1”。
它是在代码中强制执行的,但现在不在数据库中。
是否可以在数据库级别强制执行此操作?
答案 0 :(得分:1)
您可以在两列上创建唯一索引:
UNIQUE KEY uix_1 (jobid, main)
唯一索引允许多个NULL值可为空的列,因此对(1, NULL)
对可以多次插入,而对(1, 1)
对只能插入一次。
如果要将main
列的值限制为1和NULL,则有一些选择:
CHECK
约束–需要MySQL 8 ENUM('yes')
–使用数字作为枚举值有误FOREIGN KEY (main) REFERENCES main_values(main)
BIT(1)
数据类型-这也将允许0