实施独特的列

时间:2011-07-01 22:08:31

标签: mysql unique-constraint

如果在数据库表结构中使列唯一,是否需要检查是否已通过脚本在表中存在要插入的新值?或者只是插入允许DBMS过滤非新值的值?

4 个答案:

答案 0 :(得分:2)

当您尝试在唯一列中插入重复值时,插入查询将失败。因此,确保检查插入查询是否顺利进行可能是一个好主意。不管情况如何,你应该总是检查你的插入查询是否通过:)

答案 1 :(得分:1)

在将数据插入数据库之前,应始终验证数据。话虽如此,如果您尝试在唯一定义的列上插入非唯一值会发生什么是SQLexception。

为了在插入之前验证这一点,您可以例如执行

 select 1
 from mytable_with_unique_column
 where my_unique_column = myNewValue

如果查询返回任何内容,则只是不要尝试插入,因为这将抛出SQLException。

答案 2 :(得分:1)

唯一约束的验证绝对是一种矫枉过正。

在列上添加唯一约束时,会为此列创建隐式索引。因此,DBMS可以(并且将会)更快地验证您的数据。不幸的是,当您尝试在列中插入重复值时,您将遇到必须处理的约束违例异常(但是在使用脚本验证时您必须处理此类错误)。

祝你好运。

答案 3 :(得分:1)

您可以将insert语句和验证select组合成一个语句:

insert into mytable_with_unique_column (...) values (...)
where not exists
(
  select 1
  from mytable_with_unique_column
  where my_unique_column = myNewValue
)

如果还没有具有给定唯一值的行,则只会插入新行。