我有一个像这样的简单表
CREATE TABLE authid(
id INT NOT NULL AUTO_INCREMENT,
authid VARCHAR(128) NOT NULL UNIQUE,
PRIMARY KEY(id)
);
现在,如果我使用
插入一个值INSERT INTO authid(authid) VALUES('test');
它会正常工作并且第一次返回插入的id,但是如果我在authid已经存在时再次执行它(注意我们将authid标记为UNIQUE)它将返回错误。
有没有办法在一个SQL语句中实现这一点:插入它,获取id,如果它已经存在,仍然得到id。
答案 0 :(得分:1)
看看这个:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
如果您使用的是MySQL 5.0或更高版本,则可以使用“INSERT ... ON DUPLICATE KEY UPDATE”语法。你可以将它与LAST_INSERT_ID()结合起来(我对此并不乐观)
所以:
insert into authid (authid) values ('test') on duplicate key update id=LAST_INSERT_ID(id), authid='test';
select LAST_INSERT_ID();
答案 1 :(得分:0)
确实,如果你尝试在UNIQUE字段中插入相同值的2倍,它将无效,这就是UNIQUE字段的重点。
如果我理解得很清楚,您想知道是否可以根据项目的存在来使用INSERT或UPDATE语句?然后你需要2个查询,1个用于测试存在,另一个用于插入新值或更新现有值
答案 2 :(得分:0)
有条件地插入值(即如果它不存在)。无论插入是否发生,在语句结束时结果都是相同的:值将在表中。因此,只需选择与该值匹配的行的ID即可。或者,在SQL中说,像这样:
INSERT INTO authid (authid)
SELECT 'test'
WHERE NOT EXISTS (
SELECT *
FROM authid
WHERE authid = 'test'
);
SELECT id
FROM authid
WHERE authid = 'test'
;