Mysql

使用來自一個查詢的自動增量 id 作為下一個插入的 fk

  • September 17, 2013

我不確定我是否過於復雜,或者我是否看不到樹木的樹木。

我有兩個表,都有自動遞增的 ID。

Table 1:
ID - auto
field - int
other field - varchar

Table 2:
ID - auto
Table1Id - FK
field - varchar

第一個表儲存一篇文章,第二個儲存與之相關的圖像的位置。

對於我上傳數據的表格,所有要儲存的資訊都會被記錄下來。我需要使用相同的 ID 同時執行兩個插入(我意識到這是愚蠢的)。

我的計劃(有缺陷)是插入表 1,獲取 id,然後插入表 2。

如果使用者在兩個插入之間的間隙中訪問該站點並看到一團糟,則問題之一。

有沒有更簡單的方法,我想我犯了一個錯誤,或者我錯過了一些明顯的東西,因為它不應該這麼難。:)

這是(部分)事務進入的地方。假設您的事務隔離級別是“已送出讀”、“可重複讀”或“可序列化”(MySQL 預設為“可重複讀”並且任何將其設置為低於“已送出讀”的人都是違反宇宙法則的罪行),其他交易(在某種程度上)對您的交易中所做的更改視而不見。

所以你應該:

START TRANSACTION;
INSERT #1;
INSERT #2;
COMMIT;

其他事務將無法讀取您的第一個 INSERT 行(儘管它們可以通過鎖找到其存在的痕跡——您可能對此不感興趣)。他們將只能讀取您的更改或一個都不能讀取。

同樣,這取決於這些事務不是來自具有“已送出讀”隔離級別的連接的假設——不幸的是——任何人都可以為自己的連接進行更改。

引用自:https://dba.stackexchange.com/questions/50075