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

Javascript 如何在MySQL数据库中实现这种自动增量,javascript,mysql,database,jdbc,indexing,Javascript,Mysql,Database,Jdbc,Indexing,我有一张桌子叫“动物” 此表中有四列 动物 动物指数 繁殖 BreedIndex 这四列都应该是主键 我想让它们逻辑上自动递增,这意味着得到这样的东西 | Animal| AI | Breed | BI | ---------------------------- | dog | 1 | Akita | 1 | | cat | 2 | Persan | 1 | | dog | 1 | Barbet | 2 | | dog | 1 | Boxer | 3 |

我有一张桌子叫“动物”

此表中有四列

动物 动物指数 繁殖 BreedIndex 这四列都应该是主键 我想让它们逻辑上自动递增,这意味着得到这样的东西

| 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")

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

< P>我会考虑使用不同的数据模型。也许是更友好的关系:

动物:

| 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列的自动递增,但是由于BRIDE_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'));
请注意,这将创建一个零索引列,正如上面的示例数据所示


<> P>有其他方法可以做这个存储过程或触发器,但是这是一个快速的,数据库提供者不可知的方法来实现我认为你正在寻找的。

< P>我会考虑使用一个不同的数据模型。也许是更友好的关系:

动物:

| 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列的自动递增,但是由于BRIDE_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'));
请注意,这将创建一个零索引列,正如上面的示例数据所示


您还可以通过存储过程或触发器执行此操作,但这是一种快速且与数据库提供程序无关的方法,可以实现我认为您需要的功能。

请注意@rmlan解释的解决方案非常有用、简单且与数据库无关。但是,它在企业级应用程序中可能无法很好地工作,特别是在高插入率的情况下

在这些情况下,并行线程可以生成相同的id


对于这些情况,我建议使用触发器。

请注意,@rmlan解释的解决方案非常有用、简单,并且与数据库无关。但是,它在企业级应用程序中可能无法很好地工作,特别是在高插入率的情况下

在这些情况下,并行线程可以生成相同的id


对于这些情况,我建议使用触发器。

您是被迫使用此数据模型的吗?这有点忽略了您正在使用的关系数据库的关系部分。您能提供一个替代方案吗?也许你的意思是使用两个不同的表?这太疯狂了。@Havenard为什么?Bread_idx的目的是什么?你是被迫使用这个数据模型的吗?这有点忽略了您正在使用的关系数据库的关系部分。您能提供一个替代方案吗?也许你的意思是使用两张不同的桌子?这太疯狂了。@Havenard为什么呢?这个品种的目的是什么?谢谢,我会试试看,如果有效的话,确保我会把它标记为答案。谢谢,我会试试的,如果有用的话,我会把它标记为答案。又是Thx