【发布时间】:2012-07-15 03:26:53
【问题描述】:
是否可以在具有重复值的列的现有表中创建主键?我想要的是以前的记录不验证,但新记录将通过这个验证。在 mysql 中是否可能。我知道在 Oracle (here is an example) 中是可能的,但不知道 mysql。
【问题讨论】:
标签: mysql database oracle phpmyadmin mysql-workbench
是否可以在具有重复值的列的现有表中创建主键?我想要的是以前的记录不验证,但新记录将通过这个验证。在 mysql 中是否可能。我知道在 Oracle (here is an example) 中是可能的,但不知道 mysql。
【问题讨论】:
标签: mysql database oracle phpmyadmin mysql-workbench
link you posted 作为对 Nerd-Herd 答案的评论使用 deferred 约束。这些约束在事务结束时检查,而不是在语句执行时检查。
MySQL 不支持延迟约束
如果您绝对需要延迟约束并想坚持使用开源数据库,则需要迁移到 PostgreSQL。
【讨论】:
不,不可能。它违反了主键的含义。但是如果你想有一个复合主键,那是可能的
【讨论】:
主键始终是唯一标识符,如果您将其设为非唯一,则它不再是标识符,为什么要重复它?如果您有多个条目具有重复的字段,则该字段不是您的主键,但是,您可以将其与另一个将为您提供主键的字段结合使用(不是非常推荐,但您可以将此字段加上时间戳字段您的组合主键)。
在这种情况下,我建议创建一个自动增量键,并只使用这个作为普通字段重复的字段,也许可以为其添加一个索引来改进搜索。您仍然可以在任何字段上查找记录,只是因为它不是您的主键,但这并不意味着您将无法搜索和获取它。主键的想法是,它将为您提供 1 条且仅 1 条记录,而不是 1 条或更多。
【讨论】: