如何在mysql数据库中实现这种自动增量

deyfvvtc  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(343)

我有一张table叫 animal .
此表中有四列
动物
动物索引
繁殖
布雷迪克斯
这四列都应该是 primary key 我想让他们自动增加逻辑这意味着得到这样的东西。

| Animal| AI | Breed  | BI |
----------------------------
| dog   | 1  | Akita  | 1  |
| cat   | 2  | Persan | 1  |
| dog   | 1  | Barbet | 2  |
| dog   | 1  | Boxer  | 3  |
| eagle | 3  | Bald   | 1  |

如果我输入一个

INSERT INTO animal (Animal, Breed) VALUES("dog", "Akita")

我的索引将自动递增。我怎样才能做到这一点?

b09cbbtk

b09cbbtk1#

我会考虑使用不同的数据模型。也许有更友好的关系:
动物:

| id | name  |
--------------
| 1  | dog   |
| 2  | cat   |
| 3  | eagle |

品种:

| id | name    | breed_idx | animal_id |
---------------------------------------|
| 1  | Akita   | 0         | 1         |
| 2  | Persan  | 0         | 2         |
| 3  | Barbet  | 1         | 1         |
| 4  | Boxer   | 2         | 1         |
| 5  | Bald    | 1         | 3         |

mysql可以很容易地处理id列的自动递增,但是由于“breed\u idx”列需要一些逻辑,所以您必须自己处理。一种方法是在插入中使用select:

insert into breed (name, breed_idx, animal_id) values('Shar pei', (select count(*) from breed where animal_id = (select id from animal where name = 'dog')), (select id from animal where name = 'dog'));

请注意,这将创建一个索引为零的列,如上面的示例数据所示。
有其他方法可以做到这一点(存储过程或触发器),但这是一种快速的、与数据库提供程序无关的方法,可以实现(我认为)您想要的目标。

f1tvaqid

f1tvaqid2#

请注意,@rmlan解释的解决方案非常有用、简单,而且与数据库无关。但是,它在企业级应用程序中可能无法很好地工作,特别是在高插入率的情况下。
在这些情况下,并行线程可以产生相同的id。
对于这些情况,我建议使用触发器。

相关问题