我有这个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中做得最好?
谢谢
答案 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)
正如你自己所说 - 有两种方法,做一些基准或选择符合你编码风格的基准。
我更喜欢第一种方法,而不是处理主键违规异常