mysql在同一语句中插入select

时间:2011-03-14 18:50:44

标签: mysql sql

我希望在插入过程中模拟auto_increment场景,而不使用具有auto_increment属性的字段。这是方案sql语句:

insert into acct set id=(select @vid:=max(id)+1); select @vid;

基本上,我希望插入并在相同时选择完成,这样我就可以保证vid的值是唯一的。

3 个答案:

答案 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;