SQL 語句總結,這些可別再忘記了

底下這些最容易忘:

  • 如果有主鍵或者唯一鍵衝突則不插入:insert ignore into。

  • 如果有主鍵或者唯一鍵衝突則更新,注意這個會影響自增的增量:INSERT INTO room_remarks(room_id,room_remarks)VALUE(1,"sdf") ON DUPLICATE KEY UPDATE room_remarks = "234"。

  • 如果有就用新的替代,values 如果不包含自增列,自增列的值會變化:REPLACE INTO room_remarks(room_id,room_remarks) VALUE(1,"sdf")。

  • 備份表:CREATE TABLE user_info SELECT * FROM user_info。

  • 複製表結構:CREATE TABLE user_v2 LIKE user。

  • 從查詢語句中導入:INSERT INTO user_v2 SELECT * FROM user 或者 INSERT INTO user_v2(id,num) SELECT id,num FROM user。

  • 連表更新:UPDATE user a, room b SET a.num=a.num+1 WHERE a.room_id=b.id。

  • 連表刪除:DELETE user FROM user,black WHERE user.id=black.id。

 

鎖相關(底下的很少用)

  • 共享鎖:select id from tb_test where id = 1 lock in share mode。

  • 排它鎖:select id from tb_test where id = 1 for update。

 

優化時用到(得記住):

  • 強制使用某個索引:select * from table force index(idx_user) limit 2。

  • 禁止使用某個索引:select * from table ignore index(idx_user) limit 2。

  • 禁用緩存(在測試時去除緩存的影響):select SQL_NO_CACHE from table limit 2。

 

SQL 編寫得注意的:

  • where 語句的解析順序是從右到左,條件儘量放 where 不要放 having。

  • 採用延遲關聯(deferred join)技術優化超多分頁場景,比如 limit 10000,10,延遲關聯可以避免回表。

  • distinct 語句非常損耗性能,可以通過 group by 來優化。

  • 連表儘量不要超過三個表。

答案更多mysql內容:V信掃描下面二維碼,關注後回覆“mysql”即可~

https://img-blog.csdnimg.cn/20200301205522946.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章