我希望在插入过程中模拟auto_increment场景,而不使用具有auto_increment属性的字段。这是方案sql语句:
insert into acct set id=(select @vid:=max(id)+1); select @vid;
基本上,我希望插入并在相同时选择完成,这样我就可以保证vid的值是唯一的。
答案 0 :(得分:1)
如果您希望在具有保证唯一性的事务中共享自动增量值,则应该为所有可保留最后唯一值的事务显示可锁定单例。
在MyISAM
中,它在InnoDB
中的表格元数据中存储在服务器启动后第一次插入时填充MAX(id)
的特殊内存对象中。
当然你可以制作自己的(比如一张带有单个记录的专用表格),但老实说,我认为在这样的解决方案中没有任何有关内置功能的好处。
答案 1 :(得分:0)
insert into acct values ( (select max(id)+1 from acct), ... rest_of_vars );
答案 2 :(得分:0)
您可以在transaction中执行此操作,以确保没有其他人可以访问该表:
START TRANSACTION;
insert into acct set id=(select @vid:=max(id)+1);
select @vid;
COMMIT;