mysql常见错误汇总

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: mysql常见错误汇总

列别名问题

  1. 可以在查询选择列表中使用别名为列提供 不同名称。可以使用 、 或子句中的别名来引用该列:GROUP BY ORDER BY HAVING
SELECT SQRT(a*b) AS root FROM tbl_name
  GROUP BY root HAVING root > 0;
SELECT id, COUNT(*) AS cnt FROM tbl_name
  GROUP BY id HAVING cnt > 0;
SELECT id AS 'Customer identity' FROM tbl_name;
  1. 标准 SQL 不允许在子句中引用列别名。此限制是施加的 因为当评估子句时, 列值可能尚未确定。

例如,以下查询是非法的:WHERE

SELECT id, COUNT(*) AS cnt FROM tbl_name
  WHERE cnt > 0 GROUP BY id;

子句确定哪些行 应包含在条款中, 但它指的是未知的列值的别名 直到选择行并按 .WHERE GROUP BY GROUP BY

  1. 在查询的选择列表中,带引号的列别名可以是 使用标识符或字符串引号字符指定:
SELECT 1 AS `one`, 2 AS 'two';
  1. 在声明的其他地方,引用了对别名的引用 必须使用标识符引用,否则引用被视为 字符串文字。例如,此语句按 列中的值,使用 别名:id ‘a’
SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY `a`;

例如,以下查询是非法的

此语句按文本字符串分组,并且无法按预期工作:'a'

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY 'a';

使用 DATE 列的问题

日期值的格式为

根据标准 SQL,不允许使用其他格式。你 应该在 UPDATE 表达式和 SELECT 语句的子句中使用此格式。

例如:‘YYYY-MM-DD’ ‘WHERE’

SELECT * FROM t1 WHERE date >= '2003-05-05';

为方便起见,MySQL会自动将日期转换为 数字(如果日期用于数字上下文),

MySQL还允许在以下情况下使用“宽松”字符串格式

INSERT INTO t1 (idate) VALUES (19970505);
INSERT INTO t1 (idate) VALUES ('19970505');
INSERT INTO t1 (idate) VALUES ('97-05-05');
INSERT INTO t1 (idate) VALUES ('1997.05.05');
INSERT INTO t1 (idate) VALUES ('1997 05 05');
INSERT INTO t1 (idate) VALUES ('0000-00-00');
SELECT idate FROM t1 WHERE idate >= '1997-05-05';
SELECT idate FROM t1 WHERE idate >= 19970505;
SELECT MOD(idate,100) FROM t1 WHERE idate >= 19970505;
SELECT idate FROM t1 WHERE idate >= '19970505';

但是,以下语句不起作用:

SELECT idate FROM t1 WHERE STRCMP(idate,'20030505')=0;

STRCMP是一个字符串函数, 因此,它会转换为格式的字符串并执行字符串比较。它不会转换为日期并执行日期比较。所以报错

空值问题

NULL与空字符串不是一回事

例如, 以下陈述完全不同:NULL

INSERT INTO my_table (phone) VALUES (NULL);
 INSERT INTO my_table (phone) VALUES ('');

这两个语句都在列中插入一个值,但第一个语句插入一个值,第二个语句插入一个空值 字符串。

第一个的含义可以看作是“电话号码未知”和 第二种可以看作是“该人已知 没有电话,因此没有电话号码。phoneNULL

可以使用 IS NULL 和 IS NOT NULL 运算符和 IFNULL() 函数来查看

在 SQL 中,NULL 与任何其他值相比,该值永远不会为真除非另有说明

示例 返回值是NULL

SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);

对于任何表达式都从不为 true:NULLexpr = NULLexpr = NULL

SELECT * FROM my_table WHERE phone = NULL;

若要查找值,必须使用 IS NULL测试。

以下语句显示如何查找电话NULL号码和’ '电话号码:

SELECT * FROM my_table WHERE phone IS NULL;
SELECT * FROM my_table WHERE phone = ' ';

COUNT 它计算行和 不是单个列值。例如,以下 语句生成两个计数。第一个是计数 表中的行数,第二个是 列中的非值数:NULL NULLage

SELECT COUNT(*), COUNT(age) FROM person;

使用 MySQL 程序时的常见错误

1 拒绝访问

Access denied

一个错误可以有很多 原因。通常问题与MySQL帐户有关 服务器允许客户端程序在以下情况下使用 连接

2 无法连接到[本地] MySQL服务器

Can’t connect to [local] MySQL server

查看是否可以ping通 如果不可以检查防火墙是否放行 如果可以检查端口是否被占用 线程是否成功开启

3 与 MySQL 服务器的连接丢失

Lost connection to MySQL server

检查一下网络问题 如果是本机查看防火墙和端口

4 以交互方式输入密码失败

加一个-p

Password Fails When Entered Interactively

mysql -u user_name -p

5 连接过多

Out of memory

这意味着 MySQL 没有足够的内存来 存储整个查询结果:

mysql: Out of memory at line 42, 'malloc.c'
mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)
ERROR 2008: MySQL client ran out of memory

要解决此问题,请首先检查查询是否 正确。

它应该返回这么多行是否合理? 如果没有,请更正查询,然后重试。

否则,可以 使用 -quick 选项调用 MySQL 主要,这会减少 客户端上的负载(但服务器上的负载更多)

7 MySQL 服务器已消失

MySQL server has gone away

这个需要可以去日志中去具体查看

细致分析错误

错误1

ERROR 1044 (42000):Access denied for user

错误解析

数据库拒绝

解决

常见于用户授权不足。可登陆root用户,变更当前用户的对应权限。

错误2

ERROR 1045 (28000): Access denied for user *** (using password: YES

错误解析

数据库拒绝,登录密码错误

解决

核实登录密码

错误3

ERROR 1054 (42S22): Unknown column *** in ‘where clause’

错误解析

根据限定条件无法找到指定的列内容

解决

检查输入的列内容及限制条件是否正确

错误4

ERROR 1064 (42000): You have an error in your SQL syntax;

错误解析

语法错误:在语句中出现错误

解决

  1. 检查语法是否符合规定的语法规则,如登录时@符号后是否有空格
  2. 查看是否使用了保留字,找到对应的保留字,不是必须的建议修改,尽量不和保留字冲突。如果确实得用 ,就用反引号(’ ‘)把内容引起来

错误5

ERROR 1072 (42000): Key column ‘***’ doesn’t exist in table

错误解析

引用的***字段,不存在

解决

检查是否拼写错误

错误6

ERROR 1130: Host 10.0.0.1 is not allowed to connect to this MySQL server

错误解析

不允许通过ip地址10.0.0.1访问指定数据库

解决

指定登录主机信息错误。登录root用户,修改用户登录主机信息

错误7

ERROR 1133 (42000): Can’t find any matching row in the user table

错误解析

在user表中未找到指定的用户

解决

可以用flush privileges;刷新一遍,再试。如果还不行的话,核实用户信息是否正确,存在。

错误8

ERROR 1142 (42000): CREATE command denied to user ‘guest04’

错误解析

数据库拒绝执行创建命令,‘guest04’无相关的授权

解决

可以用flush privileges;刷新一遍,再试。如果还不行的话,核实用户信息是否正确,存在。

错误9

ERROR 1144 (42000): Illegal GRANT/REVOKE command;

错误解析

授权内容不合法

解决

修改成合法的

错误10

ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

错误解析

数据库拒绝执行,原因是没有取得相应动作的授权(此处为创建用户)

解决

查看确认授权情况。确实有需要,在root用户登陆后添加相应授权

错误11

ERROR 1241 (21000): Operand should contain 1 column(s)

错误解析

进行子查询的时候,选项需要1列但选择对象不唯一。

解决

选择唯一的或者变成唯一的

错误12

ERROR 1248 (42000): Every derived table must have its own alias

错误解析

在多级查询中,派生出来的表格需要加一个别名。

解决

这是为了保证每个派生出来的表都需要有一个自己的别名。

错误13

ERROR 1701 (42000): Cannot truncate a table referenced

错误解析

清空失败,还有外键关联的情况下,无法情况当前数据表

解决

解决外键就好了

错误14

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

错误解析

密码策略异常信息:格式不符合当前密码格式需求

解决

换一个

错误15

ERROR 2002 (HY000): Can’t connect to local MySQL server through [socket] ‘/tmp/mysql.sock’ (2)

错误解析

mysql的服务端,服务未启动,或者出现mysql进程异常 ,通过mysql.server status查看

解决

手动重启一下mysql服务,windows找到mysql服务,macbook中系统偏好中找到mysql服务重启
或者执行命令
 sudo /usr/local/mysql/support-files/mysql.server stop
 sudo /usr/local/mysql/support-files/mysql.server start


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
关系型数据库 MySQL Linux
Linux_Centos7在安装Mysql常见错误
Linux_Centos7在安装Mysql常见错误依赖时失败 问题一:Centos7在安装Mysql依赖(libs)或客户端(client)时失败 问题二:Centos7在安装Mysql服务器(server)时失败
1058 1
|
关系型数据库 MySQL 数据库
mysql 常见错误:Can't create table... errno150原因分析
mysql 常见错误:Can't create table... errno150原因分析
139 0
|
SQL 关系型数据库 MySQL
mysql主从同步常见错误以及解决方法总结
前言 在发生故障切换后,经常遇到的问题就是同步报错,数据库很小的时候,dump完再导入很简单就处理好了,但线上的数据库都150G-200G,如果用单纯的这种方法,成本太高,故经过一段时间的摸索,总结了几种处理方法。
2141 0
|
SQL 关系型数据库 MySQL
mysql5.7常用语句及常见错误
mysql常用语句及常见错误
3686 0
|
关系型数据库 MySQL
|
关系型数据库 MySQL 数据库
MySQL数据库常见错误及解决方案
MySQL数据库常见错误及解决方案   > ...
759 0
|
MySQL 关系型数据库 数据库
|
9天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
7天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
919 6
Mysql 数据库主从复制