我试图创建一个表,其中主键在每次发生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 ;

最佳答案

不能将Primary key设为NULL
只需将其更改为NOT NULL

`uuid` char(36) NOT NULL,

表的主键表示在最重要的查询中使用的列或列集。它有一个相关的索引,用于快速查询性能。查询性能得益于非空优化,因为它不能包含任何空值。
Reference

关于mysql - 主键UUID触发器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42477600/

10-16 07:33