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