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存在 '-'