これを行う方法はありますか?考えると、私は次の表があります。私は予想通りIntegrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'
得る値(1, "C")
を挿入しようとid
を考慮すると、Mysqlは、重複キーに挿入する値を変更します
id | value
----|------
1 | A
2 | B
は、一意の主キーです。だから、私は次のINSERT構文でAFTER INSERT ON
トリガー内部の次のインサートを使用してみました:
INSERT INTO table VALUES (NEW.id, NEW.value)
ON DUPLICATE KEY UPDATE NEW.id = NEW.id + 5000;
これは、重複キーエラーを削除しますが、それだけで重複した1(複数可)を挿入しません。
私はYogiの提案に従った手順を作成しました。これは、次のようになります。
DELIMITER //
CREATE PROCEDURE set_keys(IN id INT, IN value char(1))
BEGIN
DECLARE CONTINUE HANDLER FOR 1062
SELECT concat('Duplicate keys detected: ',id,', ',value) AS msg;
INSERT INTO tests (id, value) VALUES(id + 5000, value);
END;
//
はそれを行うための適切な方法で、今からCALL set_keys(NEW.id, NEW.value);
をしているのですか?
が自動インクリメントキーを使用するように簡単ではありません再びINSERT声明をRE_RUN? P.S.あなたは1-Aが5001-Aになり、1-Cが失われるので、新しい行を挿入しないでください。 –
@RobertoBiselloしかし、私はデータをインポートしています。別のデータベースであり、挿入を除いて元のものを変更することはできません。他のデータベースが私に1-Cを与えるならば、それを挿入して、両方の値を 'value'カラムから保つことができます。 – Newwt