所以我有一张这样的表:
create table `test` (
`testId` int(11) not null auto_increment,
`text` varchar(10) not null default '',
primary key(`testId`),
unique(`text`)
) engine=innodb;
我的插入是
test
(text
)个值('a'); test
(text
)个值('b'); test
(text
)个值('a'); 第三个插入将失败,但我希望它返回testId以获取副本(对于'a')。
如果不编写第二个查询,这可能吗?
答案 0 :(得分:1)
您无法在INSERT查询中执行此操作,因为INSERT不会返回任何行。
当一个INSERT由于重复的密钥而失败时 - 通常构建查询的东西知道它发送了什么数据,所以它可以使用它。
您可以使用12.2.5.3. INSERT ... ON DUPLICATE KEY UPDATE
来达到您想要的效果如果表包含AUTO_INCREMENT 列和INSERT ... UPDATE插入一个 行,LAST_INSERT_ID()函数 返回AUTO_INCREMENT值。如果 该语句更新了一行, LAST_INSERT_ID()没有意义。 但是,你可以解决这个问题 使用LAST_INSERT_ID(expr)。假设 该id是AUTO_INCREMENT列。 使LAST_INSERT_ID()有意义 对于更新,插入行如下:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
答案 1 :(得分:0)
有两种方法可以做到这一点。如果您只想替换现有数据,可以使用
REPLACE INTO <table_name> VALUES <values>
这是最简单的事情。但是,如果您只想检查数据是否存在,您可以先执行此操作
SELECT COUNT(*) FROM <table> WHERE <field>='<field_value>
如果存在,查询返回的次数超过0.
希望这有帮助。