如果重复出口选择该行主键,则插入到表中,否则插入该表并返回最后一个插入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;
答案 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.