MySQL和实现一些接近序列的东西?

MySQL和实现一些接近序列的东西?,mysql,database,oracle,sequences,Mysql,Database,Oracle,Sequences,我最近正在从oracle迁移到mysql,如果我在mysql中实现类似于序列的东西是一个好方法,我希望得到一些建议 基本上,我现在要如何实现它,是通过在mysql中为oracle中的每个序列提供一个单独的表,并有一个表示最后一个_数的列,在插入新行时递增该列,这是一种方法,另一种方法是创建一个表,其中几行表示每个序列,每次插入时分别递增每行 另一种更简单的方法是,在插入数据时,我可以在相关列上选择max+1 我基本上在考虑切换到select max+1选项,因为它似乎更容易实现,但我想获得一些建

我最近正在从oracle迁移到mysql,如果我在mysql中实现类似于序列的东西是一个好方法,我希望得到一些建议

基本上,我现在要如何实现它,是通过在mysql中为oracle中的每个序列提供一个单独的表,并有一个表示最后一个_数的列,在插入新行时递增该列,这是一种方法,另一种方法是创建一个表,其中几行表示每个序列,每次插入时分别递增每行

另一种更简单的方法是,在插入数据时,我可以在相关列上选择max+1

我基本上在考虑切换到select max+1选项,因为它似乎更容易实现,但我想获得一些建议,您认为如何使用这些选项是最好的方法,以及在使用select max+1时是否存在我目前不知道的任何陷阱

另外,我不使用自动增量和函数last_insert_id的原因是我想遵循ansi标准


谢谢。

有一个读取一致性问题,两个会话都在运行

insert into ... select max(..)+1 from ...
。。。同时,它们都看到相同的max..值,因此它们都尝试插入相同的新值

maxima方法的表也有同样的问题,必须使用锁定机制来避免多个会话读取相同的值。这导致了一个并发性问题,表中的插入被序列化。

首先:如果在高隔离级别中使用事务,max+1版本不能保证为您提供序列


如果无法避免,我们通常使用序列的方法是创建一个具有自动增量值的表,插入到其中,选择最后一个插入id,从表中删除字段,其中的字段自动增量可以实现您想要的功能吗?应该提到,我想遵循ansi标准。AFAIK对于序列没有ansi标准,只针对生成的标识列。如果您需要那么多序列,为什么不迁移到PostgreSQL并从许多其他高级功能中获益呢。尤其是从Oracle PostgreSQL迁移时,SQL可能比MySQL更适合。@没有名称的\u horse\u会创建一个函数,执行选择列名进行更新;比更新集x=y;是否符合ansi标准?我支持horsey的评论-我发现从Oracle到Postgres的移动非常轻松。感谢您的回复,基本上我当前更新表的方式是首先使用select…for update获取最后一个_编号,因此它会锁定行,直到事务完成,然后我增加值并对序列表执行更新。选择。。。FOR UPDATE将在事务期间锁定序列表。这意味着,您不能有两个同时需要序列运行的事务-这可能是可接受的,也可能不是可接受的Max+1甚至不能与读取提交的隔离级别一起工作。重要的一点是:它不能保证为您提供一个sequenceYes,我知道,但您的语句暗示它可能在某些隔离级别工作。