MySQL中使用序列

2018年刚开始,就碰到了一件比较棘手的问题,公司的程序需要支持MySQL数据库,之前用的是ORACLE和DB2,程序里用到了序列,但是MySQL不支持序列,网上搜索了一下,思路就是用SEQUENCE表来模拟。

先创建一个SEQUENCE表:

再往表里插入数据,一个序列一条记录,比如:

再创建一个获取下一个序列值的函数NEXT_VAL:

这里用到了UPDATE,我们的程序接口进来以后就会起事务,接口退出时才会提交事务,一个事务之内会多次获取序列值,接口在并发环境下被调用,所以这个实现是存在问题的,首先并发性能不高,UPDATE语句锁数据,要在事务提交之后才会释放,而且还存在死锁的可能。

后来我们尝试把引擎修改为MyISAM,这个引擎为表锁,而且UPDATE之后就会释放锁,然后建多个序列表,一个表只有一条数据,多线程下性能有改善,但不是特别明显。

不知道事务和多线程环境下MySQL使用序列有没有更好的方案?

您还未添加分享代码,请到主题选项中,添加百度分享代码!

您可以选择一种方式赞助本站

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

图片 表情