mysql常见错误汇总

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,数学建模,java,数据库,缓存)