【问题标题】:How to define a deferred constraint in MySQL如何在 MySQL 中定义延迟约束
【发布时间】:2012-07-15 03:26:53
【问题描述】:

是否可以在具有重复值的列的现有表中创建主键?我想要的是以前的记录不验证,但新记录将通过这个验证。在 mysql 中是否可能。我知道在 Oracle (here is an example) 中是可能的,但不知道 mysql。

【问题讨论】:

    标签: mysql database oracle phpmyadmin mysql-workbench


    【解决方案1】:

    link you posted 作为对 Nerd-Herd 答案的评论使用 deferred 约束。这些约束在事务结束时检查,而不是在语句执行时检查。

    MySQL 不支持延迟约束

    如果您绝对需要延迟约束并想坚持使用开源数据库,则需要迁移到 PostgreSQL。

    【讨论】:

      【解决方案2】:

      不,不可能。它违反了主键的含义。但是如果你想有一个复合主键,那是可能的

      【讨论】:

      【解决方案3】:

      主键始终是唯一标识符,如果您将其设为非唯一,则它不再是标识符,为什么要重复它?如果您有多个条目具有重复的字段,则该字段不是您的主键,但是,您可以将其与另一个将为您提供主键的字段结合使用(不是非常推荐,但您可以将此字段加上时间戳字段您的组合主键)。

      在这种情况下,我建议创建一个自动增量键,并只使用这个作为普通字段重复的字段,也许可以为其添加一个索引来改进搜索。您仍然可以在任何字段上查找记录,只是因为它不是您的主键,但这并不意味着您将无法搜索和获取它。主键的想法是,它将为您提供 1 条且仅 1 条记录,而不是 1 条或更多。

      【讨论】:

      猜你喜欢
      • 2010-11-03
      • 2020-04-19
      • 2012-04-28
      • 2013-12-24
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2013-04-25
      • 2014-10-30
      相关资源
      最近更新 更多