当前位置:   article > 正文

Mysql实现非主键字段自增_mysql非主键自增

mysql非主键自增

现在有一个表为a_model_info,表中有一个id为主键且值为递增,现在需要将表中一个非主键的值(model_code)进行递增

我们知道,一个表中只能有一个自增字段,但是不代表我们不能用别的方法来实现,比如用触发器,具体操作如下

  1. -- 创建序列
  2. CREATE TABLE e_model_sequence(
  3. id INT NOT NULL PRIMARY KEY,
  4. value INT NOT NULL
  5. );

上边操作执行完成后会多出一张表

 然后我们再给这张表加一条数据(10000就是你自增的初始值,所以你的a_model_info表中第一条记录为10001)

  1. -- 新增一个初始值
  2. INSERT INTO e_model_sequence(id,value) VALUES(1,10000);

创建一个BEFORE INSERT 的触发器,每次插入数据时将model_code(a_model_info表里的非主键字段)的字段的值设置为自增的值,increment_model_code为创建的触发器的名字

  1. -- 创建一个BEFORE INSERT 的触发器,每次插入数据时将model_code(a_model_info表里的非主键字段)的字段的值设置为自增的值,increment_model_code为创建的触发器的名字
  2. CREATE TRIGGER increment_model_code
  3. BEFORE INSERT ON a_model_info
  4. FOR EACH ROW
  5. BEGIN
  6. UPDATE e_model_sequence SET value = value + 1 WHERE id = 1;
  7. SET NEW.model_code = (SELECT value FROM e_model_sequence WHERE id = 1);
  8. END;

 创建完之后,你的触发器中就会多出一个,如果执行语句闲麻烦可以直接在此处添加,手动添加要注意定义的填写

如果有第二个表也有相同的需求,可以用同一个序列,执行语句如下

  1. -- 增加一条新的记录在序列表中
  2. INSERT INTO e_model_sequence(id,value) VALUES(2,10000);

 创建一个BEFORE INSERT 的触发器,每次插入数据时将type_code(a_type_info表里的非主键字段)的字段的值设置为自增的值,increment_type_code为创建的触发器的名字

  1. -- 创建一个BEFORE INSERT 的触发器,每次插入数据时将type_code(a_type_info表里的非主键字段)的字段的值设置为自增的值,increment_type_code为创建的触发器的名字
  2. CREATE TRIGGER increment_type_code
  3. BEFORE INSERT ON a_type_info
  4. FOR EACH ROW
  5. BEGIN
  6. UPDATE e_model_sequence SET value = value + 1 WHERE id = 2;-- 注意此时的id为2
  7. SET NEW.type_code = (SELECT value FROM e_model_sequence WHERE id = 2);-- 注意此时的id为2
  8. END;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/912140
推荐阅读
相关标签
  

闽ICP备14008679号