我有一个包含列的表:
employer_id
contact_id
primary
前两个是整数,最后一个是1/0的tinyint。雇主可以加入多个联系人,反之亦然。但是,我想强制说,每个特定雇主只能有一个实例,其中primary = 1。可能有很多,其中primary = 0。
有没有办法通过在MySQL中使用约束/键来做到这一点?
由于
答案 0 :(得分:4)
不通过密钥,但您可以设置插入/更新触发器以检查(count(*) where primary=1 and employer_id=?) <= 1
。
编辑:实际上,我认为有一种方法:你制作第二个表,其中employer_id
为主键,第二个表为主要联系人。所以你有这两个表:
=================================== ================================
| maintable | | maincontacttable |
=================================== ================================
|employer_id|contact_id|...data...| |employer_id|primary_contact_id|
| PK | FK | | | PK FK | FK |
=================================== ================================
不再有primary
列。由于employer_id
是第二个表中的键,因此最多只能有一个条目。
您通过左外连接获得主要联系人,并返回主要联系人或null
。
答案 1 :(得分:0)
几天前我遇到了类似的情况,我所做的是再添加一列“created_at”,这样我就可以检索“primary”(最后一个插入并且使用primary = 1);