主键约束处理的更好方法?
我有这个 sqlite 表:
创建表帧(videomd5 TEXT,framemd5 TEXT,类型TEXT,主键(videomd5,framemd5))
正如您所看到的,该表具有组合主键,因为允许其中一个字段具有相同的值,但不能同时具有两个字段。
目前我正在执行这样的检查
从帧中选择framemd5,其中framemd5='$digest' AND videomd5='$videomd5'
在向表中添加一些内容以避免主键约束之前,但我觉得有更好的方法来处理它。我是否应该在不先检查的情况下触发 INSERT,然后再处理 CONSTRAINT?如果是这样,在 Perl 中如何最好地完成此操作?
谢谢
i have this sqlite table:
CREATE TABLE frames (videomd5 TEXT, framemd5 TEXT, type TEXT, PRIMARY KEY (videomd5, framemd5))
As you can see, the table has a combined PRIMARY KEY because it is allowed that one of the fields has the same values but never both at once.
Currently I'm performing a check like this
SELECT framemd5 FROM frames WHERE framemd5='$digest' AND videomd5='$videomd5'
before adding something to the table to avoid a PRIMARY KEY CONTRAINTs but i feel there is a better way to handle it. Should i fire the INSERT without checking first and handel the CONSTRAINT afterwards? If so, how is this best done in perl?
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,您可以在插入中使用“或忽略”,例如:
有关详细信息,请参阅官方文档:
http://www.sqlite.org/syntaxdiagrams.html#insert-stmt
Yes you can use the "OR IGNORE" in your insert, eg:
Refer to the official doc for the details:
http://www.sqlite.org/syntaxdiagrams.html#insert-stmt
正如您自己所说 - 有两种方法,进行一些基准测试或选择与您的编码风格相匹配的方法。
不过,我更喜欢第一种方法,而不是处理主键违规异常
As you said yourself - there are two ways, do some benchmarks or select the one which matches your coding style.
I prefer first approach, though, than handling primary key violation exceptions