如何在MySQL中定义延迟约束

时间:2012-07-16 09:34:32

标签: mysql database oracle phpmyadmin mysql-workbench

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

3 个答案:

答案 0 :(得分:6)

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

MySQL不支持延迟约束

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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