首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql上模拟序列以准备迁移到oracle

问在mysql上模拟序列以准备迁移到oracle
EN

Database Administration用户
提问于 2012-07-30 18:09:59
回答 2查看 998关注 0票数 2

我一直在开发一个针对MySQL的应用程序,而一个新的开发服务器正在缓慢地安装。新的dev服务器将使用oracle,而且由于我们已经接近它,所以我希望从主键中删除auto_increment属性,并模拟Oracle的序列。我已经好几年没使用甲骨文了。

由于每个预插入触发器都将执行相同的操作--从*foo_sequence*中获取表foo的下一个id,甲骨文是否允许实现某种形式的动态/词法触发?

有什么窍门花招吗?

编辑#1: 1550 -这不是一个大量使用的应用程序。一次使用将导致在最大的事务中插入13个小的、简单的记录。并发性是未知的,但是一个用户造成任何意义的锁饥饿的可能性是估计很低的IMO。

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

谢谢,

解决方案:

  • 我正在实现一个类作为我与序列的接口。
    • 在mysql上,我实现了一个保存序列值的表,并实现了一个存储过程来获取下一个值并更新行。类将调用这个存储的proc并返回值。
    • 在甲骨文上,我将从甲骨文序列中得到下一个值。该类将提出此请求。序列类将请求序列的下一个值。

  • 应用程序代码将使用Sequence类获取插入的下一个序列值,将"nextval“实现细节从使用该值的insert语句中抽象出来。
EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-07-30 18:35:23

“陷阱”是,在几乎每一种情况下,您都不希望仅仅为了隐藏pk插入而对触发器进行性能和维护方面的攻击。

您确实应该编写查询来插入sequence.nextval和INSERT。在迁移的过程中,在几年后后悔之前就去做吧。

票数 6
EN

Database Administration用户

发布于 2012-07-30 18:53:12

由于缺乏序列对象的有人为MySQL应用程序设计了一个序列范例,过去有一篇文章讨论了MySQL是如何实现的。

我回答了这个问题回到2012年3月16日。

从两个角度来思考它

透视图#1

如果您有任何特殊的表是围绕通过使用Oracle序列而变得过时的序列设计的,则不需要迁移这些表。您的代码库必须进行更改,以从Oracle序列调用NEXTVAL来替换更新您的序列表。

透视图#2

如果您希望保留围绕您控制的序列设计的特殊表,您的代码将不需要更改,但是Oracle将如何执行呢?使用Oracle的IMHO就像使用一个MyISAM表:发出一个完整的锁来增加和返回一个值。您的方法比Oracle序列更好吗?你必须对此进行基准测试。结果将决定您是保留代码库还是替换所有排序代码。

尾声

不管你做什么决定,你都得接受。我之所以这么说,是因为您的排序代码在今天的Oracle 11g中可能很棒,只是因为Oracle的最新升级或数据库上数据流量的增加超过了它。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/21703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档