2011-07-11 14 views
0

私はこのsqliteのテーブルを持っている:プライマリキーの制約処理の改善?

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

あなたが見ることができるようにフィールドのいずれかが同じ値を持っていませんが、決して両方を一度にいることを許されているので、テーブルを組み合わせPRIMARY KEYを持っています。

現在、私は、PRIMARY KEYのCONTRAINTsを避けるために、テーブルに何かを追加する前にこの

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

のようなチェックを行っていますが、私はそれを処理するためのより良い方法があると感じています。最初にチェックせずにINSERTを起動し、後でCONSTRAINTを実行する必要がありますか?もしそうなら、これはどのようにしてperlで最もうまくいくのでしょうか?あなた自身を言ったように

はあなたに

答えて

1

を扱うよりも、しかし、最初のアプローチを好む:

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

+0

この機能は、ありがとうございます。 – Andy

0

ありがとうございました - そこには二つの方法があり、いくつかのベンチマークを行うか、あなたのコーディングスタイルに合ったものを選択します。

私はたとえば、はい、あなたの挿入に「OR IGNORE」を使用することができ、主キー違反の例外に

関連する問題