2015-10-15 88 views
0

我创建这个MySQL功能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并行调用此函数可以返回相同的序列

以前有人做过这个吗?

回答

0

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

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

+0

似乎我必须进行压力测试,那么只有我可以拿出答案 –