首页新闻找找看学习计划

UPDATE t1 SET serialno = serialno+1 OUTPUT inserted.serialno是否是一个原子操作?会否有并发问题?

0
[待解决问题]

UPDATE t1 SET serialno = serialno+1 OUTPUT inserted.serialno

 

 

可以用来生成序列号吧?

 

@dudu

kingcomxu的主页 kingcomxu | 初学一级 | 园豆:4
提问于:2016-09-12 21:47
< >
分享
所有回答(3)
0

是一个原子操作.不过干吗不用自增ID...

吴瑞祥 | 园豆:28731 (高人七级) | 2016-09-13 00:00

 哥, 你全栈啊, 怎么啥都懂咧...

前几天刚回答了我一个前端的...

 

我感觉用这种的话灵活一点, 可以跨表, 可以在应用端利用这个id合成别的id, 比如说加上uid使订单变得难以猜测之类的...是我一点不成熟的想法

支持(0) 反对(0) kingcomxu | 园豆:4 (初学一级) | 2016-09-13 09:17

@kingcomxu: 没啥意义..真想弄这些可以百度下推特的id生成算法.那个不错.

支持(0) 反对(0) 吴瑞祥 | 园豆:28731 (高人七级) | 2016-09-13 09:30

@吴瑞祥: 哥, 这条语句加上where条件在各种事务或并发下都不会有问题是吧?

支持(0) 反对(0) kingcomxu | 园豆:4 (初学一级) | 2016-09-13 09:39

@kingcomxu: 解决并发问题的办法之一就是 update set 字段=新值 where 字段=旧值,

不过还是建议你别用这种东西...

支持(0) 反对(0) 吴瑞祥 | 园豆:28731 (高人七级) | 2016-09-13 09:59
0

update column=column+1 真的是原子操作么?表示怀疑!

数据库也是先查出来数据,然后再+=1 在update

czd890 | 园豆:7575 (大侠五级) | 2016-09-13 12:31
0

是原子操作,由于加的X锁,不会被其他操作同时修改,生成序列号,这种方式太简单了

悦光阴 | 园豆:2239 (老鸟四级) | 2016-09-13 18:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册