0
嘿,這裏是我無法弄清楚的一個。我們在數據庫中有一個表格,PHP插入記錄。我創建了一個觸發器來計算要插入的值。計算的值應該是唯一的。然而,我經常會發現表格中的幾行有完全相同的數字。該數字是年,月和日的組合以及當天的訂單數量。我認爲插入的單一操作是原子的,並且在事務正在進行時表被鎖定。我需要計算的值是唯一的...服務器版本是5.0.88。服務器是帶有雙核處理器的Linux CentOS 5。MySQL事務和觸發器
這裏是觸發:
CREATE TRIGGER bi_order_data BEFORE INSERT ON order_data
FOR EACH ROW BEGIN
SET NEW.auth_code = get_auth_code();
END;
相應的程序看起來像這樣:
CREATE FUNCTION `get_auth_code`() RETURNS bigint(20)
BEGIN
DECLARE my_auth_code, acode BIGINT;
SELECT MAX(d.auth_code) INTO my_auth_code
FROM orders_data d
JOIN orders o ON (o.order_id = d.order_id)
WHERE DATE(NOW()) = DATE(o.date);
IF my_auth_code IS NULL THEN
SET acode = ((DATE_FORMAT(NOW(), "%y%m%d")) + 100000) * 10000 + 1;
ELSE
SET acode = my_auth_code + 1;
END IF;
RETURN acode;
END
爲什麼不把時間縮短到ms。或者選擇一個序列/自動增量編號並添加它。 – Jules 2010-11-15 12:54:21
我第二個自動遞增數字,如果你不使用某種內部方法的計數器,你將有競爭條件的風險 – ZaQ 2010-11-15 12:56:49
那麼......每一行都有一個獨特的自動增量編號。但是,計數的數字用於其他目的。訂單被輸入到表格中,然後好的狀態機將它拿起併發送給遺留系統處理。表格中的順序隨着其在精狀態機中的進展而改變。舊系統支持所描述格式的10位數字。因此,添加自動增量會在系統完成9999次訂單後暫停系統... – user390133 2010-11-15 14:33:29