簡體   English   中英

mysql在同一語句中插入select

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM