2014-03-02 62 views
0

如何在表中實現兩個自動增量字段。我發現這可以用觸發器來完成。如何使用觸發器爲非主鍵色列添加自動增量

爲varchar字段已經完成觸發自動遞增,現在需要另一場(INT)autocrement

Trigger 
======== 

DELIMITER $$ 
CREATE TRIGGER tg_customer_details_insert 
BEFORE INSERT ON customer_details 
FOR EACH ROW 
BEGIN 
    INSERT INTO customer_details_seq VALUES (NULL); 
    SET NEW.Customer_id = CONCAT('CUST', LPAD(LAST_INSERT_ID(), 3, '0')); 
END$$ 
DELIMITER ; 

我需要的是設置自動增量領域 「CUSTOMER_ID」 和 「Slno」。

其中Customer_id(Varchar)是主鍵,並使用上述觸發器完成自動增量。

現在我需要在同一張表中添加Slno(Int)的自動增量。

感謝, Acube

+0

你的'varchar'和'int auto ..'字段上的組合鍵怎麼樣? –

回答

0

一種方法是這樣的:

DELIMITER $$ 
CREATE TRIGGER tg_customer_details_insert 
BEFORE INSERT ON customer_details 
FOR EACH ROW 
BEGIN 
    set NEW.IntId = coalesce((select max(IntId) from customer_details), 0) + 1; 
END$$ 
DELIMITER ; 

但是,爲什麼不只是使用一個auto_increment列?這就是它的目的。

+0

此版本的MySQL尚不支持'具有相同動作時間和事件的多個觸發器對應一個表格 – acube

+0

#1075-不正確的表格定義;只能有一個自動列,並且必須將其定義爲密鑰 – acube

+0

@acube。 。 。如果你想做兩個動作,但是一個觸發器的邏輯。 –

0

以下觸發器可以做你需要的工作:

DELIMITER $$ 

CREATE TRIGGER `tg_customer_details_insert` BEFORE INSERT ON `customer_details` 
FOR EACH ROW 
BEGIN 
    INSERT INTO `customer_details_seq` (`id`) VALUES (0); 
    SET NEW.`customer_id` := CONCAT('CUST', LPAD(LAST_INSERT_ID(), 3, '0')); 
END*/$$ 

DELIMITER ; 

SQL Fiddle demo

有關需要爲表customer_detailscustomer_id列另一個序列設計的奇怪的事情。這是爲什麼?

+0

這不工作,告訴我錯誤 – acube