MYSQL 序列函数

标签 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,但我担心 并发问题。即并行调用此函数可以返回相同的序列

以前有人这样做过吗?

最佳答案

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

此外,它返回的值是根据每个连接维护的,因此该函数将为不同的连接返回不同的值。

关于MYSQL 序列函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33140408/

相关文章:

.net - 从 SQL Server 存储过程或函数引用 .NET 程序集

java - 更新 jlabel

mysql - 在 mySQL 多 select 语句上加入不同的 WHERE 子句

MySQL 转置

php - echo 输出sql JOIN?

php - 如果未重定向,则重定向页面

mysql - 从定义者帐户执行 mysql 存储过程,没有执行权限

java - createStoredProcedureQuery 未解决

java - Executor/Queue 仅处理最后一个已知任务

c# - Entity Framework Core RowVersion 列未使用 PostgreSQL 更新