我想一些類似的東西:MySQL的:使用該行的ID被插入插入語句本身
INSERT INTO dir_pictures SET filename=CONCAT(picture_id,'-test');
picture_id是我的主鍵,自動遞增。基本上我試圖把這個插入語句的ID,在聲明本身。
我確定它可以用一些額外的PHP代碼或使用多個語句來完成,但我想知道是否有一種快速簡便的方法可以一次完成。
PS。上述說明始終將'0測試'
我想一些類似的東西:MySQL的:使用該行的ID被插入插入語句本身
INSERT INTO dir_pictures SET filename=CONCAT(picture_id,'-test');
picture_id是我的主鍵,自動遞增。基本上我試圖把這個插入語句的ID,在聲明本身。
我確定它可以用一些額外的PHP代碼或使用多個語句來完成,但我想知道是否有一種快速簡便的方法可以一次完成。
PS。上述說明始終將'0測試'
先插入記錄。然後用分號分隔您的語句,並使用LAST_INSERT_ID()來獲取新插入的自動增量ID。一次執行。
insert into dir_pictures .... ; update dir_pictures set filename=CONCAT(LAST_INSERT_ID(),'-test') where id = LAST_INSERT_ID()
那麼,你直到插入完成後才知道行ID ......所以,我認爲這不會奏效!
爲什麼不只是在檢索行時計算文件名呢?
INSERT INTO dir_pictures (file_extension) VALUES ('-data')
SELECT picture_id, CONCAT(picture_id, file_extension) as filename
FROM dir_pictures
這是不是真的有可能,它很可能是您的最佳利益簡單地concatinate它的出路,而不是在路上。
SELECT CONCAT(ID,「-text」 )作爲文件名FROM dir_pictures
如果你真的想這樣做,在一個SQL語句,你可以嘗試像一個黑客:
INSERT INTO dir_pictures SET filename=CONCAT((select max(picture_id)+1 from dir_pictures),'-test');
當心的競爭條件,如果這是一個多線程應用程序...
而且,我懷疑它會在空表上工作...
我想如果之前已經刪除了一行,這將不會準確 – 2009-10-30 17:12:38
是的,謝謝,很好。如果_most recent_ added行被刪除,則會失敗。 – violoncello 2009-10-30 18:53:37
只要選擇了當前的AUTO_INCREMENT值表形式information_schema作爲您的插入的一部分:
INSERT INTO dir_pictures SET filename=CONCAT((SELECT auto_increment FROM
information_schema.tables WHERE table_name='dir_pictures'), '-test')
這可能會導致競爭條件...小心 – 2009-10-28 23:31:23
它怎麼可能? last_insert_id()應該是連接特定的。引用手冊:'從多個客戶端同時使用LAST_INSERT_ID()和AUTO_INCREMENT列是完全有效的。每個客戶端都會收到客戶端執行的最後一條語句的最後一個插入ID。 – ChristopheD 2009-10-28 23:33:07
夠公平的。我的錯誤 – 2009-10-28 23:34:48