mysql 查詢更新操作


題:獲取姓名為張三 的用戶的age,並將age賦值給姓名趙六的的用戶。
原始數據:

一般的寫法是:

UPDATE user
SET age = ( SELECT age FROM user WHERE name = '張三' )
WHERE
name = '趙六';

這樣的寫法對Oracle和SQLServer 來說都是正確的。但是mysql會報一個錯誤 :

 

原因是:mysql在from子句中遇到子查詢時,先執行子查詢並將結果放到一個臨時表中,我們通常稱它為“派生表”;臨時表是沒有索引、無法加鎖的。

update時,會鎖表,此時不能再select。所以會報錯,

此時如果將結果集放入臨時表,臨時表不會上鎖,所以,可以正常查詢並更新。

正確的寫法:

UPDATE user
SET age = ( SELECT age FROM ( SELECT * FROM user ) AS tb_temp WHERE name = '張三' )
WHERE
name = '趙六'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM