2017-02-27 64 views
0

我想在每次有INSERT事件時主鍵都是自動生成的UUID。但問題是,當我試圖執行一個INSERT查詢跳過主鍵列是這樣的:主鍵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

CAN NOT做出Primary key作爲NULL

只是將其更改爲NOT NULL

`uuid` char(36) NOT NULL, 

一個表的主鍵表示列或列集,你用於最重要的查詢。它有一個關聯索引,用於快速查詢性能。查詢性能受益於NOT NULL優化,因爲它不能包含任何NULL值。

Reference

+0

我無法相信我錯過了這一個。但是當我將它設置爲「NOT NULL」時,它沒有改變任何東西。然後我認爲我的觸發條件檢查'如果new.uuid IS NULL THEN'。我將它改爲檢查它是否爲空或空字符串的東西。 '如果new.uuid是空值或new.uuid =''THEN',它的工作原理!謝謝你讓我意識到。 – legitghost

+0

不客氣;)@Ghost – wajeeh