一、知识点

1、mysql批量插入不重复uuid数据(insert select 语法)

问题描述:

  1. 通过select replace(uuid(), ‘-’, ‘’) , 生成的uuid全部重复。(可能是navicat执行顺序的问题)

  2. select uuid() ,生成的uuid不重复。但是有“-”且长度太长,不符合要求。

完美解决:

修改为:select md5(uuid())

来源:来源

二、问题梳理

1、数据库导入sql错误 Unknown collation: ‘utf8mb4_0900_ai_ci’

解决方案原文链接

错误原因:
高版本数据库(8.0)转存sql文件 并导入低版本数据库(5.7)

解决办法:

方案一:升级mysql至高版本

方案二:将需要导入的sql文件,把其中的
utf8mb4_0900_ai_ci全部替换为utf8_general_ci
utf8mb4替换为utf8
重新执行sql文件

2、windows上同时安装两个版本的mysql数据库

原文链接

3、mysql 连接远程连接服务器 1130错误

mysql 连接远程连接服务器 1130错误

1、以权限用户root登录

mysql -u root -p

2、选择mysql库

use mysql;

3、查看mysql库中的user表的host值
(即可进行连接访问的主机/IP名称)

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

4、修改host值
(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址

update user set host = '%' where user ='root';

5、刷新MySQL的系统权限相关表

flush privileges;

6、再重新查看user表时,有修改

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

4、mysql登录报错1045

【MySql】解决mysql没有root用户问题

1、修改配置文件,添加不校验密码

skip-grant-table

2、mysql -uroot -p任意密码登录

use mysql;

select Host,User from user;
①若是没有root用户

在这里插入图片描述

发现没有root用户了
执行命令创建用户并授权

create user 'root'@'%' identified by 'root';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; #赋予所有库所有表操作权限

flush privileges;

在这里插入图片描述

②若是有root用户

执行修改密码命令

set password=password('root');

若出现以下错误

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

就先执行 flush privileges;,再执行修改密码
在这里插入图片描述

3、配置文件恢复配置

去掉以下配置

skip-grant-table

4、重启mysql服务

systemctl restart mysqld

再登陆就正常了

5、锁表和解锁

锁表和解锁

①方法1

    //1.查看当前数据库锁表的情况
    SELECT * FROM information_schema.INNODB_TRX;
    //2.杀掉查询结果中锁表的trx_mysql_thread_id
    kill trx_mysql_thread_id

②方法2

    1、查询是否锁表
    show OPEN TABLES where In_use > 0; 
    2、查询进程
    show processlist
    查询到相对应的进程===然后 kill    id
    补充:
    查看正在锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 
    查看等待锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 

6、mysql update操作时not in的用法

报错的写法:

UPDATE t_resource_structure SET second_root_id = '123' 
where structure_id not in 
(SELECT structure_id FROM t_resource_structure WHERE structure_id = '234');

正确的写法:

UPDATE t_resource_structure SET second_root_id = '123' 
where structure_id not in 
(SELECT a.structure_id FROM (SELECT * FROM t_resource_structure WHERE structure_id = '234') a);

更多推荐