[英]mysql insert select in same statement
我想在插入過程中模擬auto_increment場景,而不使用具有auto_increment屬性的字段。 這是方案sql語句:
insert into acct set id=(select @vid:=max(id)+1); select @vid;
基本上,我想插入,然后選擇在同一時間完成的,所以我可以保證VID的價值是獨一無二的。
如果您希望在具有保證唯一性的事務之間共享自動增量值,則應該為所有可保留最后唯一值的事務顯示可鎖定單例。
在MyISAM
,它存儲在表的元數據中,在InnoDB
,在服務器啟動后的第一個插入中用MAX(id)
填充的特殊內存對象中。
當然你可以制作自己的(比如一張帶有單個記錄的專用表),但老實說,我認為這種解決方案中沒有任何內置功能的好處。
insert into acct values ( (select max(id)+1 from acct), ... rest_of_vars );
您可以在事務中執行所有這些操作,以確保沒有其他人可以訪問該表:
START TRANSACTION;
insert into acct set id=(select @vid:=max(id)+1);
select @vid;
COMMIT;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.