在 mysql 上模拟序列,为迁移到 oracle 做准备

Len*_*ffe 2 mysql trigger oracle

我一直在开发一个针对 MySQL 的应用程序,而一个新的开发服务器正在慢慢建立。新的开发服务器将使用 oracle,并且由于我们即将准备就绪,我想从主键中删除 auto_increment 属性,并模拟 Oracle 的序列。我好几年没用oracle了。

由于每个预插入触发器都会做同样的事情——从 *foo_sequence* 中获取表foo的下一个 id ,Oracle 是否允许实现某种形式的动态/词法触发?

任何提示、技巧或陷阱?

编辑 #1:1550 - 这不是一个频繁使用的应用程序。一次使用将导致在最大的事务中插入 13 次小的、简单的记录。并发性是未知的,但一个用户导致任何重要的锁饥饿的可能引擎盖是估计非常低的 IMO。

编辑 #2 1612:目的是在 mysql 中模拟 oracle 序列,然后在 oracle 上使用 oracle 序列。

谢谢。

解析度:

  • 我正在实现一个类作为序列的接口。
    • 在 mysql 上,我正在实现一个表来保存序列值,以及一个存储过程来获取下一个值并更新行。该类将调用此存储过程并返回值。
    • 在 oracle 上,我只会从 oracle 序列中获取下一个值。班级会提出这个要求。Sequence 类将从序列中请求下一个值。
  • 应用程序代码将使用 Sequence 类来获取插入的下一个序列值,从使用该值的插入语句中抽象出“nextval”实现细节。

rfu*_*sca 6

“问题”在于,几乎在所有情况下,您真的不想为了隐藏 pk 插入而为触发器带来性能和维护损失。

您确实应该编写查询以使用 INSERT 插入 sequence.nextval。在迁移过程中进行,以免几年后后悔。