在一个查询中插入并选择唯一元素的id

时间:2013-05-14 17:05:22

标签: mysql sql

我有一个像这样的简单表

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。

3 个答案:

答案 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'
;