2017-02-27 6 views
0

INSERTイベントが発生するたびに主キーが自動生成されたUUIDのテーブルを作成しようとしています。主キーUUIDトリガー

INSERT INTO `tablename` (`reference`) VALUES ('hey'); 

んが、行が挿入されていないとエラーなし:私はこのような主キー列をスキップINSERTクエリを実行しようとすると、しかし、問題があります。ただ "0行が挿入されました..." ここに私のテーブルとトリガーがあります。ありがとうございました。

CREATE TABLE `tablename` (
    `uuid` char(36) NULL, 
    `reference` varchar(100) NOT NULL, 
    PRIMARY KEY (uuid) 
); 

DELIMITER ;; 
CREATE TRIGGER before_insert_tablename 
BEFORE INSERT ON tablename 
FOR EACH ROW 
BEGIN 
    IF new.uuid IS NULL THEN 
    SET new.uuid = uuid(); 
    END IF; 
END 
;; 

DELIMITER ; 

答えて

1

あなたPrimary keyNULLとして

だけNOT NULL

`uuid` char(36) NOT NULL, 

テーブルの主キー列を表してそれを変更または列の集合作ることができないこと最も重要なクエリで使用します。クエリのパフォーマンスを向上させるために、関連するインデックスがあります。クエリのパフォーマンスには、NULL値を含めることができないため、NOT NULL最適化のメリットがあります。

Reference

+0

私は、私はこの1つを逃したとは考えられていないことができます。しかし、それを 'NOT NULL'に設定すると、何も変更されませんでした。そして私はトリガーの私の状態がIF new.uuid is NULL THENをチェックしていると考えました。私はそれがnullか空文字列かどうかを調べる何かに変更しました。 IF new.uuidがNULLの場合、またはnew.uuid = '' THEN'の場合、動作します。私を実現させてくれてありがとう。 – legitghost

+0

あなたは歓迎です;)@Ghost – wajeeh