【Sql】常见问题列表

死锁

解决思路就是:避免同时操作数据;

首先我们执行
show engine innodb status\G;
查看死锁情况,也可以
mysql -u root -p --execute="show engine innodb status \G"> c:/mysql.log
把死锁信息输出到本地磁盘,查看起来比较方便
mysql 死锁分析 - 那片天空!那片海! - CSDN 博客

例如:

通过定位死锁的数据库: show engine \G,发现一个统计任务、一个改价任务,同时修改同一个端口的内容,导致死锁。

解决方法:将两个任务的时间错开,改价的为每分钟的 0 秒触发;统计的为每两分钟的 30 秒触发;

日志文件被删除后,无法正常启动

通过systemctl status mariadb.service来查看缺少什么文件,创建对应的即可,
如果是权限问题,把外层的文件夹修改下权限 /var/log/mysql
然后重启: systemctl restart mariadb.service

Authentication plugin ‘caching_sha2_password’ cannot be loaded

1
2
3
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
select Host,user,plugin,Authentication_string from user;

完美解决 ERROR2059(HY000):Authenticationplugincachingsha2_passwordcannotbeloaded 问题小洋人最 happy 的专栏-CSDN 博客_error2059

不可重复读和幻读的区别

  • 脏读:读取未提交的数据;
  • 不可重复读(update):前后多次读取,数据内容不一致;
  • 幻读(insert、delete):前后多次读取,数据总量不一致;
  • 快速理解脏读、不可重复读、幻读和 MVCC - 云+社区 - 腾讯云
    (1) 不可重复读是读取了其他事务更改的数据,针对 update 操作
    解决:使用行级锁,锁定该行,事务 A 多次读取操作完成后才释放该锁,这个时候才允许其他事务更改刚才的数据。
    (2) 幻读是读取了其他事务新增的数据,针对 insert 和 delete 操作
    解决:使用表级锁,锁定整张表,事务 A 多次读取数据总量之后才释放该锁,这个时候才允许其他事务新增数据。

SELECT IN(子查询)太慢问题

1
explain SELECT * FROM third_video_iqiyi WHERE  v_id in (SELECT v_id FROM third_video_iqiyi WHERE v_id < 10);

常见问题_20220608185021_2022-06-08-18-50-22
在表的整体数据量大的情况下,上面的 sql 基本无法执行。

优化方案

1
explain SELECT * FROM third_video_iqiyi a ,(SELECT v_id FROM third_video_iqiyi WHERE v_id < 10) b WHERE a.v_id = b.v_id;

常见问题_20220608184956_2022-06-08-18-49-57