MySQL唯一性的价值

时间:2011-04-29 18:31:01

标签: mysql key constraints unique

我有一个包含列的表:

employer_id
contact_id
primary

前两个是整数,最后一个是1/0的tinyint。雇主可以加入多个联系人,反之亦然。但是,我想强制说,每个特定雇主只能有一个实例,其中primary = 1。可能有很多,其中primary = 0。

有没有办法通过在MySQL中使用约束/键来做到这一点?

由于

2 个答案:

答案 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);