Mysql 如果名称已被使用,如何获取INSERT的ID,否则生成新名称

Mysql 如果名称已被使用,如何获取INSERT的ID,否则生成新名称,mysql,sql,database,Mysql,Sql,Database,我在执行INSERT查询时遇到了一些问题。 我在一个表中插入一个值,如下所示: TABLE cars ID Brand Model B_ID --------------------------- 1 Ford Escort 1 2 Ford Focus 1 3 Nissan Micra 2 4 Renault Megane 3 5 Ford Mustang 1 ID是唯一的,B_ID

我在执行INSERT查询时遇到了一些问题。 我在一个表中插入一个值,如下所示:

TABLE cars

ID   Brand     Model   B_ID
---------------------------
1    Ford      Escort   1
2    Ford      Focus    1
3    Nissan    Micra    2
4    Renault   Megane   3
5    Ford      Mustang  1
ID是唯一的,B_ID是每个相同品牌的相同ID

当插入一个新条目时,我希望能够检查一个品牌是否已经存在,并使用相同的B_ID,否则我希望增加最高的B_ID并插入它

我已经做到了这一点:

INSERT INTO 'cars' ('brand', 'model', 'B_ID')
VALUES (
'Nissan'
'Note'
'SELECT B_ID FROM cars WHERE brand = 'Nissan'
 )
如果我的子查询不匹配,因为它是一个新品牌,我如何获得最高的B_ID并将其递增1


我正在使用MySQL。

在您规范化表之前:

INSERT INTO `cars` (`brand`, `model`, `B_ID`)
select 'Nissan', 'Note', coalesce(Max(B_ID),0)+1 FROM cars WHERE brand = 'Nissan'
INSERT INTO cars
  (brand, model, B_ID)
SELECT 'Nissan'
     , 'Note'
     , COALESCE( ( SELECT B_ID 
                   FROM cars 
                   WHERE brand = 'Nissan'
                   LIMIT 1
                 )
               , ( SELECT MAX(B_ID) 
                   FROM cars 
                 ) + 1
               , 1               --- this is for the case when the table is empty
               )

还要注意,如果您有多个并发的
INSERT
,则可能以具有不同
品牌
但相同
B_ID
的行结束:为什么要在同一个表中同时记录品牌名称和品牌ID?您不需要ID吗?我的设计/品牌ID不完全是用在其他地方的吗?是的,您需要有一个单独的品牌表(ID、品牌名称、原产国(不需要,但可能有用))还有一个单独的模型表,模型id作为主键,品牌id将其绑定到品牌表。我认为这没有考虑到如果品牌是并且在表上没有记录,谢谢,这将为我节省很多麻烦!但现在,如果“Nissan”不存在,它仍然不会返回任何行,因此它根本不会插入值