MYSQL序列功能

时间:2015-10-15 05:18:36

标签: mysql stored-procedures concurrency stored-functions

我已经创建了这个mysql函数

delimiter //
create function seq(tag int(10)) returns int
 begin
 update seq set val=last_insert_id(val+1) where tag_code=tag ;
 return last_insert_id();
 end
//
delimiter ;
CREATE TABLE `seq` (
  `tag_code` int(1) NOT NULL,
  `val` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`tag_code`)
) ENGINE=InnoDb DEFAULT CHARSET=latin1
insert into seq values(1,100);
insert into seq values(2,100);

它与InnoDb一起工作正常,但有时我的函数调用时间超时。 我打算将表引擎切换到MyISAM,但我很担心 并发问题.i.e对此函数的并行调用可以返回相同的序列

之前有没有人这样做过?

1 个答案:

答案 0 :(得分:0)

last_insert_id()函数的行为与表引擎无关。如果它可以为2个独立调用返回相同的值,那么这意味着自动增量功能被破坏,2个带有自动增量字段的记录可能具有相同的值。

此外,它返回的值是按连接维护的,因此函数将为不同的连接返回不同的值。