![]() |
1
15
如果自动增量不足以满足您的需要,可以使用 n 这样命名的序列: 创建一个表来存储序列:
假设您在表中有一行“foo”,您可以原子地获取下一个序列ID,如下所示:
不需要锁。这两个语句都需要在同一个会话中执行,以便在执行select时实际定义本地变量@next。 |
![]() |
2
9
正确的方法在 MySQL manual :
|
![]() |
3
5
我们是一家高交易量的游戏公司,需要这些解决方案来满足我们的需求。Oracle序列的一个特性也是可以设置的增量值。
解决方案使用
要获取下一个索引:
用存储过程或函数抽象以下内容
|
![]() |
4
0
表上的mysql identity列不会处理这个问题吗? 创建表表名称 ( ID整数自动递增主键 ) 或者,您是否希望将它用于除插入另一个表之外的其他用途? 如果您也使用过程语言(而不仅仅是SQL)进行编写,那么另一个选项是创建一个包含单个整数(或长整型)值的表,以及一个存储过程,该存储过程将其锁定(从中选择),然后递增并解锁,然后返回值。 (注意-在返回值之前始终递增-如果有错误,它会最大限度地增加不重复的机会-或将整个事务包装在事务中。) 然后,您可以独立于主插入/更新来调用它(这样它就不会被调用机制自动创建的任何事务捕获),然后将其作为参数传递到您想要使用它的任何地方。 因为它独立于你正在做的其他事情,所以它应该很快并且避免锁定问题。即使您确实看到了由锁定引起的错误(除非数据库过载,否则不太可能),您也可以第二次/第三次调用它。 |
![]() |
TheStoryCoder · Yii2:是否在事务外部执行查询? 6 年前 |
![]() |
Ali · 将SQL事务用于单个SQL查询[已关闭] 6 年前 |
![]() |
Marcus Cemes · 选择。。。用于更新在提交后选择旧数据 7 年前 |