2016-10-08 31 views
1

MySQLのエラー:主キーの重複エントリー「XXX」

Script showing Primary Key

の下にすでにテーブル内の既存のレコードがあるように私は、2つのフィールドで構成された主キーを持つテーブルのMySQLを持っている:

Existing Records

私が発行していますINSERTクエリは次のとおりです。

The Query

私は、クエリを実行します。

INSERT INTO `case_data` 
VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD',*********************** 

のエラーメッセージが表示は次のとおりです。

[Err] 1062 - Duplicate entry 'WCD/2016/1000017' for key 'PRIMARY'

は私が主キー制約に違反していますか?

ありがとうございます。

+0

一意の文字列は、主キー列にのみ追加できます。ここでは "WCD/2016/1000017"はすでにテーブル内に存在しているので、同じ文字列を主キー列のテーブルに追加することはできません。 –

+0

はい、主キー制約に違反しています。 –

+0

@Vivek: '** WCD/2016/1000017 **'という値を別のものに変更すると、なぜ複合キーを使用する必要がありますか? –

答えて

1

あなたはすでにテーブルに存在して挿入しようとしている行の主キー値かどうかを確認できます。

SELECT COUNT(*) 
FROM case_data 
WHERE caseno = 'WCD/2016/1000017' AND iteration = 2; 

それは0を返す場合、あなたはPK制約に違反して挿入しても安全なありませんあなたが望む行(追加のチェック、トリガー、制約がないと仮定)。それ以外の場合は、1が返されます。つまり、すでに列に値が設定されている行があるため、許可されていない行の一意性に違反します。

0を返すと、INSERTコマンドが発行されます。また、あなたのVALUESからのすべての値は、あなたの先テーブルの右側の列の中に置かれていることを確認するために文の中で、あなたの列の表を指定することを忘れないでください:

INSERT INTO case_data (caseno, iteration, casedate, casetype) 
VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD'); 

あなたの列名とテーブル名の周りのバッククォートを使用することは避けてください、彼らはドン場合コンマやスペースのような代替文字は含まれていません。これはあなたのコードをより読みやすくし、あなたの書き込み時間を間違いなく速めるでしょう。

+0

私はあなたが示唆したSELECTクエリを試してみましたが、 0を返します。しかし、私は上記のINSERTクエリで行を挿入できません。 –

+0

INSERT imhoをやり遂げるのを妨げる何かがあるはずです。これをチェックする:http://sqlfiddle.com/#!9/aa8ec –

+0

最初のボックスの下にある「Build Schema」をクリックして、2番目のボックスの下にある「Run SQL」をクリックしました。 2番目のボックスには何も表示されませんでした。申し訳ありませんが、私はSQL Fiddle **のウェブサイトを一度も使用していません。 –

関連する問題