我一直在开发一个针对MySQL的应用程序,而一个新的开发服务器正在缓慢地安装。新的dev服务器将使用oracle,而且由于我们已经接近它,所以我希望从主键中删除auto_increment属性,并模拟Oracle的序列。我已经好几年没使用甲骨文了。
由于每个预插入触发器都将执行相同的操作--从*foo_sequence*中获取表foo的下一个id,甲骨文是否允许实现某种形式的动态/词法触发?
有什么窍门花招吗?
编辑#1: 1550 -这不是一个大量使用的应用程序。一次使用将导致在最大的事务中插入13个小的、简单的记录。并发性是未知的,但是一个用户造成任何意义的锁饥饿的可能性是估计很低的IMO。
编辑#2 1612:目的是在mysql中模拟oracle序列,然后在oracle上使用oracle序列。
解决方案:
发布于 2012-07-30 18:35:23
“陷阱”是,在几乎每一种情况下,您都不希望仅仅为了隐藏pk插入而对触发器进行性能和维护方面的攻击。
您确实应该编写查询来插入sequence.nextval和INSERT。在迁移的过程中,在几年后后悔之前就去做吧。
发布于 2012-07-30 18:53:12
由于缺乏序列对象的有人为MySQL应用程序设计了一个序列范例,过去有一篇文章讨论了MySQL是如何实现的。
我回答了这个问题回到2012年3月16日。
从两个角度来思考它
如果您有任何特殊的表是围绕通过使用Oracle序列而变得过时的序列设计的,则不需要迁移这些表。您的代码库必须进行更改,以从Oracle序列调用NEXTVAL来替换更新您的序列表。
如果您希望保留围绕您控制的序列设计的特殊表,您的代码将不需要更改,但是Oracle将如何执行呢?使用Oracle的IMHO就像使用一个MyISAM表:发出一个完整的锁来增加和返回一个值。您的方法比Oracle序列更好吗?你必须对此进行基准测试。结果将决定您是保留代码库还是替换所有排序代码。
不管你做什么决定,你都得接受。我之所以这么说,是因为您的排序代码在今天的Oracle 11g中可能很棒,只是因为Oracle的最新升级或数据库上数据流量的增加超过了它。
https://dba.stackexchange.com/questions/21703
复制相似问题