私は5つの列a、b、c、d、eを持っています。最初の4列に値を挿入し、最後の列のデフォルト値を1のままにしておきます。最初の4列を主キーとして保持しました。最初の4列に重複する値が挿入されている場合は、同じ値をもう一度挿入しますが、5番目の列に増分を追加します。例:1、2、3、4が最初の4列の値である場合。次に、1,2,3,4が再び来るとき、それらは1,2,3,4として挿入される必要がありますが、5番目の列は2です。
質問する
527 次
2 に答える
1
最初の 4 列が主キーである場合、1,2,3,4 を再び使用することはできません
すなわち
列 1、列 2、列 3、列 4 を取得
1,2,3,4 - わかりました 2,1,3,4 - わかりました 2,3,1,4 - わかりました 1,4,3,2 - わかりました .. 4 C 4 の組み合わせのように
しかし
1,2,3,4 - OK 1,2,3,4 - 繰り返しますが、エラーになります!
したがって、1、2、3、4 をもう一度挿入することはできません。
于 2012-11-26T06:41:43.857 に答える
0
最初に主キーを削除し、代わりに一意のキーを追加します。
ALTER TABLE test DROP PRIMARY KEY, ADD UNIQUE KEY 'test_uIdx_a_b_c_d_e' ( a,b,c,d,e );
テーブルが次のようになっていると仮定します
CREATE TABLE test (
a int NOT NULL DEFAULT '0',
b int NOT NULL DEFAULT '0',
c int NOT NULL DEFAULT '0',
d int NOT NULL DEFAULT '0',
e int NOT NULL DEFAULT '0',
UNIQUE KEY 'test_uIdx_a_b_c_d_e' ( a,b,c,d,e )
)
次に、挿入前にトリガーを作成できます
DELIMITER ;;
CREATE TRIGGER before_test_insert
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
SET NEW.e := ( SELECT COUNT(*)+1 FROM test WHERE a = NEW.a AND b = NEW.b AND c = NEW.c AND d = NEW.d;
END;;
DELIMITER ;
これにより、フィールド e が a、b、c、d の出現回数に設定されます。
上記のコメントの1つは、より簡単な代替案を提供しました
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
于 2012-11-26T07:16:40.163 に答える