Mysql
使用來自一個查詢的自動增量 id 作為下一個插入的 fk
我不確定我是否過於復雜,或者我是否看不到樹木的樹木。
我有兩個表,都有自動遞增的 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 行(儘管它們可以通過鎖找到其存在的痕跡——您可能對此不感興趣)。他們將只能讀取您的更改或一個都不能讀取。
同樣,這取決於這些事務不是來自具有“已送出讀”隔離級別的連接的假設——不幸的是——任何人都可以為自己的連接進行更改。