mysql 常见问题

mysql常见问题

sql 常用语句

  • SHOW CREATE TABLE employees; 展示表创建时的参数

  • DESCRIBE employees; 展示表结构

  • SELECT xxx <=> null from tableName; 查询表中某列值是否为 null

  • SELECT xxx FROM table1 LIMIT (pageNumber - 1) * pageSize, pageSize; 分页查询

小知识

  • 如果有 n 个表实现多表查询,则需要至少 n-1 个连接条件

  • UNION ALL 操作符返回两个查询结果集的并集,对于结果集中重复的部分不予处理,效率比 UNION 高

sql 语句执行顺序

列的别名只能在 ORDER BY 中使用,不能在 WHERE 中使用。

SELECT name1,name2,name3 AS N3
FROM table1
WHERE name1 IN ('a','b','c')
ORDER BY N3 DESC;

因为查询语句是从FROME xxx WHERE xxx开始的,然后才是SELECT ORDER BYWHERE也需要声明在FROM后,ORDER BY之前。

navicat 连接 mysql8.1.0 报错,错误信息:1251- Client does not support authentication protocol requested by server;consider upgrading Mysql client。

出现这种情况的原因是:MySQL8 之前的版本中加密规则是 mysql_native_password,而在 MySQL8 之后,加密规则是 caching_sha2_password

mysql> select host,user,plugin,authentication_string from mysql.user;
user.png

解决方法

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> select host,user,plugin,authentication_string from mysql.user;
user2.png

再用 navicat 连接就成功了

ps:

mysql.user 表中 Host 列的含义: Host 列指定了允许用户登录所使用的 IP, 比如 user=root Host=192.168.1.1。 这里的意思就 是说 root 用户只能通过 192.168.1.1 的客户端去访问。 而%是个通配符,如果 Host=192.168.1.%,那么就表示只要是 IP 地址前缀为“192.168.1.”的客户端都可以连接。如果 Host=%,表示 所有 IP 都有连接权限。

mysql 配置文件 !includedir /etc/mysql/conf.d/ 含义: 在 MySQL 中,!includedir 是一个指令,用于指定一个目录,MySQL 服务器在读取主配置文件时会读取该目录下所有的.conf 文件 。/etc/mysql/conf.d/ 是一个目录路径,MySQL 服务器会尝试读取这个目录下所有的.conf 文件作为配置文件的一部分。

Last updated

Was this helpful?