因此,我需要基於該表中其他條目的計數安全地限制條目在表中的插入。假設我們有如下表:根據計數限制插入
資源:(ID,foreign_key)
我需要創造了多項基於外鍵條目。所以,只要我達到一個數字,我們就說我們的例子爲100,我想限制創建更多的條目。
顯而易見的答案是這樣的事情:
- 數與指定的外鍵的條目。
- 如果計數<限制插入新的條目
而事實上,這是我一直使用的是什麼。問題是,這種方法並不能防止故障,因爲在1和2之間可能會出現另一次插入。我認爲用交易的可能性,但(除非我完全誤解交易),這有同樣的問題:
- 開始交易
- 插入新的條目
- 如果條目已經超過了極限,回滾。否則提交
現在,假設我們已經有99/100個條目和兩個事務同時運行。他們都會提交,因爲他們沒有看到對方的條目。
實際上創建條目的缺點,然後刪除它,如果它是無效的(我覺得有點麻煩)我想不出一種方法來解決這個問題。有任何想法嗎?
編輯:根據要求我提供的樣本數據:
table1的 +-------------+------------------+------+-----+----------------+ | Field | Type | Null | Key | Extra | +-------------+------------------+------+-----+----------------+ | id | int(10) unsigned | NO | PRI | auto_increment | | limit | int(10) unsigned | NO | MUL | | +-------------+------------------+------+-----+----------------+
表2 +-------------+------------------+------+-----+----------------+ | Field | Type | Null | Key | Extra | +-------------+------------------+------+-----+----------------+ | id | int(10) unsigned | NO | PRI | auto_increment | | foreign_id | int(10) unsigned | NO | MUL | | +-------------+------------------+------+-----+----------------+
和一些樣本數據:
table1的 +----+----------+ | id | limit | +----+----------+ | 1 | 5 | +----+----------+
表2 +----+---------------+ | id | foreign_id | +----+---------------+ | 1 | 1 | +----+---------------+ | 2 | 1 | +----+---------------+ | 3 | 1 | +----+---------------+ | 4 | 1 | +----+---------------+
在這一點上,假設兩個用戶試圖創建table2條目。第一個將被接受,第二個被拒絕。
第一種方法是,如果兩個用戶都經歷了步驟1(計算舊條目),然後通過步驟2(插入新條目),則兩個條目都將被創建。
第二種方法,如果它們都在同一時間運行,它們都將在它們自己之前計數4個槽並提交而不是其中的一個回滾。
「我需要根據外鍵創建多個條目。」請更詳細地解釋這一點。樣本數據和期望的結果總是一個好主意。 – fancyPants