2012-05-27 42 views
4

是否有可能產生偶數或奇數的自動增量字段(跳過相反的)?我問的原因是因爲我想在兩個表格之間共享自動增量。歡迎其他方式來實現它。MySQL:僅用偶數或奇數自動遞增?

在此先感謝!

+0

您究竟打算如何共享兩張表之間的自動增量字段?這可能與答案有關。 – lanzz

+0

簡單地說 - 這兩個表是相同的(與兩個工作),我必須避免他們的自動增量字段的數字重複。 – George

+0

你能描述更多細節的任務嗎? –

回答

1

可以抵消一個表的從另一個自動增加字段,即一個表從1開始IDS,而另一個從1000000開始(或根據您的使用模式選擇其他值)。

CREATE TABLE table1 (id BIGINT UNSIGNED AUTO_INCREMENT); 
CREATE TABLE table2 (id BIGINT UNSIGNED AUTO_INCREMENT) AUTO_INCREMENT = 1000000; 

您還可以根據需要選擇自動增量列類型。 BIGINT UNSIGNED的範圍是0..18446744073709551615,它應該覆蓋大多數情況。

2

嘗試

SET @@auto_increment_increment=2; 
SET @@auto_increment_offset=2; 
1

可以使用觸發器來實現自定義自動增量功能。

創建表來存儲自定義自動增量值,並插入一個一行初始值:

CREATE TABLE autoincrement_id (id_even INT, id_odd INT); 
INSERT INTO autoincrement_id VALUES (0, 1); 

創建觸發器,將修改相應插入值行的ID:

CREATE TRIGGER set_id_in_sometable_with_odd_id BEFORE INSERT ON `sometable_with_odd_id` 
FOR EACH ROW 
BEGIN 
    SET NEW.id = (SELECT id_odd FROM autoincrement_id LIMIT 1); 
    UPDATE autoincrement_id SET id_odd = id_odd + 2; 
END; 

CREATE TRIGGER set_id_in_sometable_with_even_id BEFORE INSERT ON `sometable_with_even_id` 
FOR EACH ROW 
BEGIN 
    SET NEW.id = (SELECT id_even FROM autoincrement_id LIMIT 1); 
    UPDATE autoincrement_id SET id_even = id_even + 2; 
END; 
6

正如克林斯曼提到的,你可以這樣做,在系統級而不是會話級由my.ini文件進行如下修改(或增加):

auto-increment-increment = 2 
auto-increment-offset = 1 

auto-increment-increment = 2 
auto-increment-offset = 2 

基本上這在Master-Master複製設置中非常用。

+0

是的,但考慮到它具有全球效應並不適合我。 – George

+0

好吧,那麼在這種情況下,你應該使用基於會話的方法,這將不會超過你的連接從PHP腳本。 – Dharmavir