MySQL-语句
注意:
在事务中,UPDATE DELETE 也会索数据行,如果A UPDATE 没有提交,那B DELETE 会一直阻塞。
交换两个字段的值:
UPDATE orders as a, orders as b SET a.xx = b.xx, a.xx = b.xx WHERE a.xx < a.xx;[100w 条 修复0.4k数据 耗时极慢]update test_swap set x=(@t:=x), x=y, y=@t;(性能更佳,主键全表查一次就好)
修改字段属性:
ALTER TABLE table_name [MODIFY (COLUMN) | CHANGE] COLUMN_NAME VARCHAR(20) NOT NULL; (读x次,写x次,相当于重建)
更快的写法
ALTER TABLE table_name ALERT COLUMN COLUMN_NAME SET DEFAULT xxx;直接修改.frm文件,不查询表数据
注意: 修改字段属性时,如果是null->not null, 要先将字段填充属性,然后再更新表字段属性。
修改字段名称
ALTER TABLE table_name CHANGE (COLUMN) COL_NAME COL_NAME_2 VARCHAR(50) (NOT NULL); 默认不写就是null
修改表名
ALTER TABLE user RENAME users
添加字段
ALTER TABLE users ADD (COLUMN) age INT(3) NOT NULL [AFTER / BEFORE COL_NAME]
创建索引:
CREATE INDEX indexName ON table_name (column_name)
删除索引:
ALTER TABLE table_name DROP INDEX index_name;
子查询判断有无匹配数据:
SELECT * FROM orders where exists (SELECT 1 FROM order_item oi where oi.order_id = orders.id and item_name = ""); (SELECT 1 是因为,如果查询结果没有值的话,就什么都没有,如果有值就都显示1. ps: 默认表明可做别名。)
窗口函数 -- LAG/LEAD
解释:
LAG()函数可用于计算当前行与上一行之间的差异。
对结果集按照partition 分区后,[order by 排序] 然后找当前行的上[offset]行。
LEAD() 函数 与LAG() 效果相反
Last updated