0

重複の可能性:
行mysqlの挿入中に存在しない場合の使用方法

私は問題があります:

id(int、PK、AI、Unique)、col1(varchar)、col2(varchar)、col3(datetime)の4つの列を持つ「table」という名前のテーブルがあります。

多くのユーザーはmysqlサーバーに接続して、「テーブル」に行を挿入できます。問題は、col2とcol3が「テ​​ーブル」の他の行に存在できないことです。

私はそのようなものを書くでしょう:IF NOT EXISTS(select * from table where col2 = '2' and col3 = '2012-12-12 12:12:12')INSERT INTO table(col1、col2、col3)values(1 、2、 '2012-12-12 12:12:12')

私がやろうとしていることをあなたが知っていると思います。

これを1つのステートメント(2人のユーザーが同時に同じ行を挿入する状況を回避するため)またはトランザクションで実行しようとしています。トランザクションでそれを行う必要がある場合、それはどのタイプの分離である必要がありますか?シリアル化可能な分離によりロックテーブルが発生するため、挿入プロセスが大幅に遅くなる可能性があります。お願い助けて。

4

1 に答える 1

2

col2とcol3のペアの重複が必要ない場合(つまり、col 2は重複することができますが、col2とcol3の任意のペアは1回だけ表示されます)、次のように指定できます。

UNIQUE(col2,col3)

col2、col3ペアを挿入しようとするクエリは失敗します。これは、次のいずれかを使用して処理できます。

INSERT IGNORE INTO table(col1, col2, col3) values(1,2,'2012-12-12 12:12:12');

または、挿入によって使用できる値が変更された場合:

INSERT INTO table(col1, col2, col3) values(1,2,'2012-12-12 12:12:12') 
      ON DUPLICATE KEY UPDATE someCol=someVal
于 2012-12-16T23:59:16.927 に答える