Mysql 如果名称已被使用,如何获取INSERT的ID,否则生成新名称
我在执行INSERT查询时遇到了一些问题。 我在一个表中插入一个值,如下所示: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
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”不存在,它仍然不会返回任何行,因此它根本不会插入值