2015-09-21 35 views
-2

插入到表中如果重複退出選擇該行主鍵否則插入該表並返回最後一個插入ID?如何實現這個mysql查詢?

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(),'[email protected]',1,'123456') 
select LAST_INSERT_ID(); 

END; 

回答

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和唯一密鑰的一個表, 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. 
+0

對不起兄弟我沒有得到你的答案,你可以詳細說說 –

+0

這是使用使用INSERT做一個更新一招... .ON DUPLICATE KEY UPDATE,它管理着觸發LAST_INSERT_ID以返回更新行的id。 – Kickstart

+0

@Kickstart Bro這不是我的觀點我想要做的是檢查一個行是否存在,如果它存在我想要的行主鍵不是最後插入ID,如果它不存在我想添加該行,並在那種情況下,我想要最後一個插入ID –