mysql插入时主键id为uuid_MySQL数据库实现自动使用uuid作为主键以及解决不能调用触发器的一点思路...

本文主要向大家介绍了MySQL数据库实现自动使用uuid作为主键以及解决不能调用触发器的一点思路 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

<

这里使用触发程序实现此功能.

触发程序语法如下:

Create trigger 

{before|after}

{insert|update|delete}

On 

For each row

核心代码:

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数据库频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值