摘要:本文主要向大家介绍了MySQL数据库实现自动使用uuid作为主键以及解决不能调用触发器的一点思路 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。
本文主要向大家介绍了MySQL数据库实现自动使用uuid作为主键以及解决不能调用触发器的一点思路 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。
<
这里使用触发程序实现此功能.
触发程序语法如下:
Create trigger <tri_name>
{before|after}
{insert|update|delete}
On <tab_name>
For each row
<触发程序SQL语句>
核心代码:
1 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有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号