簡體   English   中英

組條目的Mysql自動增量

[英]Mysql Auto Increment For Group Entries

我需要設置一個具有兩個自動增量字段的表。 每個添加的記錄的標准主鍵為1個字段。 另一個字段將用於將多個記錄鏈接在一起。

這是一個例子。

field 1  |  field 2
  1           1
  2           1
  3           1
  4           2
  5           2
  6           3

請注意,字段1中的每個值都有自動增量。 字段2的自動增量略有不同。 記錄1,2和3同時進行。 記錄4和5同時進行。 記錄6是單獨制作的。

最好閱讀字段2的最后一個條目,然后在我的php程序中將其遞增1? 只是尋找最佳解決方案。

您應該有兩個單獨的表。

ItemsToBeInserted
id, batch_id, field, field, field

BatchesOfInserts
id, created_time, field, field field

然后,您將創建一個批次記錄,並將該批次的插入ID添加到將成為該批次一部分的所有項目中。

如果將batch_hash字段添加到批處理表中,然后檢查每個批處理是否唯一,那么您將獲得加分,這樣就不會意外地將同一批提交兩次。

如果您正在尋找一種僅使用一張表的更糟糕的方法,則可以執行以下操作:

$batch = //Code to run and get 'SELECT MAX(BATCH_ID) + 1 AS NEW_BATCH_ID FROM myTable' 

並將該ID添加到所有插入的記錄中。 我不建議這樣做。 您會遇到麻煩。

MySQL每張表僅提供一個自動增量列。 您不能定義兩個,這樣做也沒有意義。

您的問題不是說要使用什么邏輯來控制第二個字段的增量(稱為自動增量)。 大概您的PHP程序將驅動該邏輯。

不要使用PHP查詢最大的ID號,然后遞增並使用它。 如果這樣做,您的系統很容易受到競爭條件的影響。 也就是說,如果您的PHP程序的多個實例同時嘗試該操作,它們有時會錯誤地得到相同的數字。

Oracle DBMS有一個稱為sequence的對象,該對象會返回保證唯一的數字。 但是您正在使用MySQL。 您可以使用如下所示的編程模式獲取唯一編號。

首先為序列創建一個表。 它具有一個自動遞增字段,僅此而已。

CREATE TABLE sequence (
    sequence_id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`sequence_id`)
)

然后,當您在程序中需要唯一編號時,一個接一個地發出以下三個查詢:

INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;

確保第三個查詢返回唯一的序列號。 即使您有數十個不同的客戶端程序連接到數據庫,該保證仍然有效。 這就是AUTO_INCREMENT的優點。

第二個查詢( DELETE )防止表變大和浪費空間。 除了最近的那一行,我們不在乎表中的任何行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM