2015-10-15 87 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

似乎我必須進行壓力測試,那麼只有我可以拿出答案 –