MySQL提供了一种自动增加记录ID的机制。这可以用于许多目的,但是我需要能够使用ORACLE提供的序列。显然,为此目的创建表是没有意义的。
解决方案应该很简单:
1)创建一个表以托管所有需要的序列,
2)创建一个增加特定序列的值并返回新值的函数,
3)创建一个返回序列当前值的函数。
从理论上讲,它看起来很简单...但是...
当增加一个序列的值时(与nextval
Oracle中的相同),您需要阻止其他会话执行此操作(甚至获取当前值),直到更新完成。
两个理论选择:
a-使用UPDATE语句,一次即可返回新值,或者
b-将表锁定在UPDATE和SELECT之间。
不幸的是,MySQL似乎不允许在函数/过程中锁定表,并且在尝试在单个语句(例如UPDATE ... RETURNING ...)中完成整个操作时,必须使用@ -type变量,这些变量必须存在功能/程序的完成。
有人对此有想法/可行的解决方案吗?
谢谢。
慕少森
相关分类