首页 > 解决方案 > mysql中列类型的自动递增

问题描述

id  animal      type    value

1   Dog           Land  11
2   Fish        Water   102
3   Horse       Land    12
4   Duck        Water   104
5   Crocodile   Water   105
6   Donkey      Land    13
7   Buffalo     Land    14

如果在 type=land 时再插入一条记录,如何增加值,它将增加到 15 和

当 type=water 时再插入一条记录,它将增加到 106 请告诉我

标签: mysql

解决方案


不要实现这一点。这带来了数据变得不一致的严重风险。使用视图获取子查询中的计数。

ALTER TABLE elbat
            DROP value;

CREATE VIEW elbat_with_value
AS
SELECT t1.id,
       t1.animal,
       (SELECT count(*)
               FROM elbat t2
               WHERE t2.id <= t1.id
                     AND t2.type = t1.type) value
       FROM elbat t1;

或者在 MySQL 版本 8 中,您可以使用row_number().

ALTER TABLE elbat
            DROP value;

CREATE VIEW elbat_with_value
AS
SELECT t1.id,
       t1.animal,
       row_number() OVER (PARTITON BY t1.type
                          ORDER BY t1.id) value
       FROM elbat t1;

推荐阅读