2017-02-27 96 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