自动递增mysql触发器

时间:2013-10-23 14:02:15

标签: mysql triggers

如何根据此示例创建自动增量字段:

我有这个表格,带有“AF”字段,格式为:SN.MM.YYYY “SN”=基于最后一次插入的AI编号,MM = Atual Month,YYYY = Atual Year。

| ID |    AF       | 
____________________
|  1 | 01.10.2013  |
|  2 | 02.10.2013  |

因此,当更改月份或年份时,触发器必须设置“AF”字段: 例如:月份更改为11月(将SN重置为01)。

|  3 | 01.11.2013  |
|  4 | 02.11.2013  |

当年份改变时(将SN重置为01):

|  5 | 01.01.2014  |
|  6 | 02.01.2014  |
|  7 | 03.01.2014  |

任何人都知道如何设置触发器?

Obs:一天内可能有多条记录,因此,日期并不重要。

抱歉英文不好

谢谢你们!

1 个答案:

答案 0 :(得分:1)

从技术上讲,你可以做这样的事情

CREATE TRIGGER tg_bi_table1
BEFORE INSERT ON table1
FOR EACH ROW
  SET NEW.af = CONCAT(
    LPAD(COALESCE(
      (SELECT MAX(LEFT(af, 2)) 
         FROM table1 
        WHERE af LIKE DATE_FORMAT(CURDATE(), '__.%m.%Y')), 0) + 1, 2, '0'), 
    DATE_FORMAT(CURDATE(), '.%m.%Y'));

这是 SQLFiddle 演示

注意:这种方法(使用这种模式创建自己的before_increment值)有两个主要缺点:

  1. 在严重的并发访问下,不同的连接可能会获得相同的AF号
  2. 由于您的特定自动对焦模式(SN首先出现)使用索引是不可能的,因此您最终将获得完整扫描