MySQL常见问题的原因及解决方法

目录

一、node连接mysql数据库报错

原因

解决方法

二、MySQL自增字段不连续

原因

1、唯一键冲突导致自增字段值不连续

2、删除字段导致自增字段值不连续

3、其他

解决方法


一、node连接mysql数据库报错

用 nodejs 连接 mysql 数据库的时候可能会有报错如下:

ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

原因

MySQL8.0 之前的版本中加密规则是:mysql_native_password

为了提供更安全的密码加密方式,从 MySQL 8.0版本开始,默认的密码加密方式是:caching_sha2_password,这个加密的方式在node中不支持,所以需要去修改密码为旧版本。

解决方法

cmd 管理员进入MySQL文件夹的 bin 目录

输入以下命令:

mysql -u root -p

输入自己数据库的密码,进入数据库

查看mysql的版本,发现是8以后的,所以加密规则会变

select version();

修改加密方式(password是你正在使用的密码


ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
 
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
 

如果输入命令后发现报错:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'

可以查看,会看到root后%

use mysql;

select user, host from user where user = 'root';

所以需要修改上面两条命令为:


ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
 

刷新权限,让修改生效

FLUSH PRIVILEGES;

可以查看一下修改的加密方式是否变了:

select user,host,plugin from user where user='rootx';

二、MySQL自增字段不连续

原因

1、唯一键冲突导致自增字段值不连续

由于name字段有唯一键约束,当插入相同内容的字段时,会报 Duplicate key error(唯一键冲突)。

在这之后,在插入新数据时,自增 id 就是 3,这样就出现了自增字段值不连续的情况。

2、删除字段导致自增字段值不连续

删除字段后,自增字段不会补齐而是按照既定数值继续向下排列,会导致自增数字不连续。

3、其他

还有一些情况会造成自增不连续,比如事务回滚导致的自增键不连续、自增锁优化带来的不连续等。

解决方法

执行下面代码,会发现由于唯一键冲突导致自增不连续的数据表的id字段的自增连续了

SET @i=0;

UPDATE `tablename` SET `id`=(@i:=@i+1);

ALTER TABLE `tablename` AUTO_INCREMENT=0

如果想要清空表的话可以使用 TRUNCATE table 'good' 语句来操作,比delete效率高,并且会将自增归零。

猜你喜欢

转载自blog.csdn.net/qq_31851435/article/details/131030236