0

私は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です。

4

2 に答える 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 に答える