底下這些最容易忘:
-
如果有主鍵或者唯一鍵衝突則不插入: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”即可~