2014-03-02 31 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