【问题标题】:MySQL uniqueness of valueMySQL 价值唯一性
【发布时间】:2011-04-29 18:31:01
【问题描述】:

我有一个包含列的表:

employer_id
contact_id
primary

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

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

谢谢

【问题讨论】:

    标签: mysql key constraints unique


    【解决方案1】:

    不通过键,但您可以设置插入/更新触发器来检查 (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

    【讨论】:

    • 对,我知道我可以用触发器做到这一点......只是希望避免这种情况。暂时保持开放,以防有人有一些非常聪明的解决方案。如果没有,我就接受我的命运……和你的回应。谢谢。
    【解决方案2】:

    几天前我也遇到过类似的情况,我所做的就是再添加一列“created_at”,这样我就可以检索“primary”(最后插入的一列,primary = 1);

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      相关资源
      最近更新 更多