0

我有一个像这样的简单表

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。

4

3 回答 3

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();
于 2013-05-14T17:17:16.760 回答
0

确实,如果您尝试在 UNIQUE 字段中插入 2 倍相同的值,它将无法正常工作,这就是 UNIQUE 字段的意义所在。

如果我理解得很好,您想知道是否可以根据项目的存在使用 INSERT 或 UPDATE 语句?然后您需要 2 个查询,1 个用于测试存在,另一个用于插入新值或更新现有值

于 2013-05-14T17:11:29.383 回答
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'
;
于 2013-05-16T18:06:03.187 回答