如何实现这个mysql查询?

时间:2015-09-21 09:00:02

标签: mysql

如果重复出口选择该行主键,则插入到表中,否则插入该表并返回最后一个插入ID?

    SELECT  IF  (EXISTS(SELECT * FROM users  WHERE userName='adminchat')) THEN

BEGIN

SELECT userId FROM users  WHERE userName='adminchat';

end;

ELSE

BEGIN

INSERT INTO `users`( `userRole`, `userName`, `createdOn`, `emailId`, `is_active`, `password`) VALUES (1,'user1_chat',NOW(),'sdmd1@sdmd1.com',1,'123456') 
select LAST_INSERT_ID();

END;

1 个答案:

答案 0 :(得分:1)

如果表包含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;

使事情有效的方法是使用虚拟列, 因此,如果您的表具有auto_increment列ID和唯一键a,b和smallint哑列,则查询可能如下所示:

INSERT INTO test (a,b) VALUES ('1','2') ON DUPLICATE KEY UPDATE ID=LAST_INSERT_ID(ID),Dummy = NOT dummy;
Now, SELECT LAST_INSERT_ID(); will return the correct ID.