的全局唯一標識符在數據庫中,我認爲你將不得不自行處理事務ID在你的應用程序,或項目ID在你的應用程序以完美無瑕地執行此操作。 (!),這樣做可能工作,假設所有的刀片成功
的一種方式,如下:
然後,您可以獲取插入的ID與受影響的行數,從一環lastid(這是批量插入的第一個插入ID)。 就這樣,我檢查它完美..只是要小心,HeidiSQL例如將不返回ROW_COUNT()的正確值,可能是因爲它是一個蹩腳的GUI做隨機狗屎,我們不問它 - 但它是從完全正確的命令行或PHP的mysqli -
START TRANSACTION;
BEGIN;
INSERT into test (b) VALUES ('1'),('2'),('3');
SELECT LAST_INSERT_ID() AS lastid,ROW_COUNT() AS rowcount;
COMMIT;
在PHP它看起來像這樣(local_sqle是mysqli_query直呼叫,local_sqlec是調用mysqli_query +轉換結果集到PHP數組):
local_sqle("START TRANSACTION;
BEGIN;
INSERT into test (b) VALUES ('1'),('2'),('3');");
$r=local_sqlec("SELECT LAST_INSERT_ID() AS lastid,ROW_COUNT() AS rowcount;");
local_sqle("
COMMIT;");
$i=0;
echo "last id =".($r[0]['lastid'])."<br>";
echo "Row count =".($r[0]['rowcount'])."<br>";
while($i<$r[0]['rowcount']){
echo "inserted id =".($r[0]['lastid']+$i)."<br>";
$i++;
}
查詢分開的原因是因爲我不會使用我自己的函數得到我的結果,如果喲你用標準函數做這件事,你可以把它放回到一個語句中,然後檢索你需要的結果(它應該是結果2號 - 假設你使用了一個處理多個結果集/查詢的擴展)。
爲什麼你不能一個一個插入它們? – sanmai
你需要模擬'OUTPUT'子句。我相信你可以在MySQL中使用觸發器來做到這一點 –
你不能使用批量插入,然後函數石灰last_insert_id(),它不起作用。 –