如何使用触发器为非主键列添加自动增量

时间:2014-03-02 14:56:09

标签: mysql triggers

如何在表格中实现两个自动增量字段。我发现这可以通过触发来完成。

已完成varchar字段的触发自动增量,现在需要自动更新另一个字段(int)

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

2 个答案:

答案 0 :(得分: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列呢?这就是它的用途。

答案 1 :(得分: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_id的{​​{1}}列的另一个序列。那是为什么?