更好的主键约束处理方式?

时间:2011-07-11 13:08:02

标签: perl sqlite primary-key

我有这个sqlite表:

CREATE TABLE frames (videomd5 TEXT, framemd5 TEXT, type TEXT, PRIMARY KEY (videomd5, framemd5))

如您所见,该表具有组合的PRIMARY KEY,因为允许其中一个字段具有相同的值,但不允许同时使用两个字段。

目前我正在执行此类检查

SELECT framemd5 FROM frames WHERE framemd5='$digest' AND videomd5='$videomd5'

在向表中添加内容以避免PRIMARY KEY CONTRAINT但我觉得有更好的方法来处理它。我应该在没有先检查的情况下解雇INSERT,然后再对CONSTRAINT进行处理吗?如果是这样,如何在perl中做得最好?

谢谢

2 个答案:

答案 0 :(得分:1)

是的,您可以在插页中使用“OR IGNORE”,例如:

sqlite> create table bla (id INT PRIMARY KEY);
sqlite> insert into bla values (1);
sqlite> insert into bla values (1);
Error: column id is not unique
sqlite> insert or ignore into bla values (1);
sqlite> 

有关详细信息,请参阅官方文档: http://www.sqlite.org/syntaxdiagrams.html#insert-stmt

答案 1 :(得分:0)

正如你自己所说 - 有两种方法,做一些基准或选择符合你编码风格的基准。

我更喜欢第一种方法,而不是处理主键违规异常