2017-02-27 6 views
0

INSERT 이벤트가 발생할 때마다 기본 키가 자동 생성 된 UUID 인 테이블을 만들려고합니다.기본 키 UUID 트리거

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

이 어떤 행이 삽입되지 않고 오류 :이 같은 기본 키 열을 건너 뛰는 삽입 쿼리를 실행하려고 할 때 그러나 문제는있다. "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

는 나는 내가이 일을 놓친 믿고 수 없습니다. 하지만 'NOT NULL'로 설정하면 아무 것도 변경되지 않았습니다. 그리고 나서 방아쇠의 상태가 IF new.uuid is NULL THEN인지 확인합니다. null 또는 빈 문자열인지 확인하는 것으로 변경했습니다. 'IF new.uuid가 NULL이거나 new.uuid = ''THEN'이면 작동합니다! 나를 깨닫게 해주셔서 감사합니다. – legitghost

+0

당신은 환영합니다;) @Ghost – wajeeh