当前位置:Gxlcms > 数据库问题 > MySQL实现自动使用uuid作为主键以及解决不能调用触发器的一点思路

MySQL实现自动使用uuid作为主键以及解决不能调用触发器的一点思路

时间:2021-07-01 10:21:17 帮助过:5人阅读

use t14test 2 show tables 3 drop table if exists uuidTest 4 create table uuidTest( 5 testId VARCHAR(36) not NULL DEFAULT 1, 6 testData VARCHAR(32), 7 PRIMARY KEY(`testId`) 8 ) 9 /*创建触发器*/ 10 /* 11 * terminal创建存储过程需要定义分隔符 12 * delimiter // 13 * */ 14 create trigger tri_auto_uuid 15 before insert 16 on uuidTest 17 for each ROW 18 BEGIN 19 if new.testId = 1 THEN set new.testId = (select uuid()); 20 end if; 21 END 22 /*删除触发器*/ 23 drop trigger if exists tri_auto_uuid 24 /*插入数据*/ 25 insert into uuidTest(testData)VALUES(一条数据) 26 select * from uuidTest

运行了三次插入操作,结果如下:

技术分享

使用触发器可实现uuid作为主键.

有问题的代码:

1 create trigger tri_auto_uuid
2 after insert
3 on uuidTest
4 for each ROW
5 update uuidTest set testId=((select uuid()))

如果这样定义触发程序,看似没问题,也能添加成功,但是录入数据会报错.

Can‘t update table ‘tb_user‘ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

网上说为了避免递归触发,update一条数据后不能触发对该数据进行除了Set之外的更新操作.否则就会报错.

可是我这个触发器是after insert 而且是Set 操作,为什么会有问题呢?

这里存在某种原因,可能和递归触发有关系.暂且不去管他底层是如何运作的.只需要改变一下思路,把after insert 改成 before insert 就行了.

 

MySQL实现自动使用uuid作为主键以及解决不能调用触发器的一点思路

标签:结果   std   statement   use   而且   for   row   let   iter   

人气教程排行