mysql实用小技巧记录-- 干货

1.根据查询出来的结果修改表信息update
Q.更新每个用户签到的天数
S.场景:上线阶段需要修复数据

CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '用户名称',
`sign_days` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '签到天数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `user_sign` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '用户id',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '调用日期,格式:yyyy-mm-dd   (使用CURDATE())',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `user` (`id`, `name`) VALUES (1, '张三'),(2,'李四'),(3,'王五');
INSERT INTO `user_sign` (`user_id`, `create_time`) VALUES 
(1, '2018-05-28 22:55:53'),(1, '2018-05-29 22:55:53'),(1, '2018-05-30 22:55:53'),(1, '2018-05-31 22:55:53'),
(2, '2018-05-27 22:55:53'),(2, '2018-05-29 22:55:53'),(3, '2018-05-25 22:55:53'),(3, '2018-05-26 22:55:53'),(3, '2018-05-30 22:55:53');

-- 连表查看修复数据
update  user u inner join (select u.id ,count(*) cnt from user u 
left join user_sign us on u.id = us.user_id
group by u.id ) us on u.id = us.id set u.sign_days =  us.cnt


2.在查询的结果集里面添加筛选条件 count(distinct if()) 
Q.在30号之后签到的用户有几个
S.场景:查询结果需要去重且条件不能写在where里面
select count(distinct if(create_time > '2018-5-30',user_id,null)) as '人数' from user_sign 


3.查询天数 group_concat(column_name separator '@' ) 
Q.每个用户签到的时间。
S.场景:查询结果对应多条记录,在展示上面指向展示成一条记录
select group_concat(create_time separator '@') from user_sign group by user_id

4.强制使用索引
S.场景:发现创建了索引但是未能命中
提供一个思路,mysql在查询过程中可能出现创建了索引但是未命中的情况。可以在查询的末尾使用 force index(`idx_name`)强制使用索引
select * from table_name force index (index_name) where conditions;
https://blog.csdn.net/zixiao217/article/details/77164163

5.mysql阻塞之后如何快速定位且杀掉阻塞的线程
S.场景:产生慢SQL之后阻塞了主流程,导致后续SQL全部阻塞。需要找到产生慢SQL的用户,将其所有进程全部杀死
select concat('KILL ',id,';') from information_schema.processlist where user='root' 
https://stackoverflow.com/questions/1903838/how-do-i-kill-all-the-processes-in-mysql-show-processlist






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值