MySQL的主键也想使用uuid

问题描述-

学习项目时,案例中使用的是oracel数据库.建表时主键可以直接指定default uuid();

但是mysql并没有这种写法,自己写了不少奇怪的建表语句均不通过,从网上学习到了可以通过触发器实现。

 

问题解决-

建表时并不设置主键id为uuid

CREATE TABLE `product` (
  `id` varchar(36) NOT NULL,
  `productNum` varchar(50) NOT NULL,
  `productName` varchar(50) DEFAULT NULL,
  `DepartureTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `productPrice` double DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `product` (`id`,`productNum`)
) ;

而是在每次插入数据之前 BEFORE INSERT ON `XXXX` FOR EACH ROW 设置一个触发器,每当插入时不必提供id属性的值,而是交给触发器在每次插入自动生成uuid

CREATE TRIGGER `product_before_insert` BEFORE INSERT ON `product` FOR EACH ROW 
BEGIN
IF new.id is NULL THEN
        SET new.id = UUID();
END IF; 
END;

 

问题后续-

1`注意id属性设置时的长度 32是不够的

2`注意表名列名使用`XXXXX` ,而插入数据时使用的是'XXXX'

3`此方法生成的uuid存在 '-' 

posted @ 2021-08-06 10:21  YFEYI  阅读(252)  评论(0编辑  收藏  举报