前言
最近在完成一门课程的大作业时用到了mysql,所以就顺便入手了一些mysql8.0,当然在使用过程中也遇到了一些小问题,于是记录在此以便复习.
####运行环境说明:
->ubuntu version: 20.04
->MySql version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)
问题一:ERROR 1064 (42000)
完整问题描述:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘xxxxxx’ at line x
问题解析:
我认为这是最容易遇到的问题,发生的原因就是语法错误,再无其他
问题解决:
仔细检查语法问题,比如:
括号匹配
mysql> create table ttt (
-> xxx char,
-> xxxx char;
//缺少括号
逗号冗余
mysql> create table ttt (
-> xxx char,
//逗号冗余
-> );
中英文字符切换
该错误太过基础故不作示例
关键字遗忘
mysql> create test(
//缺少 table 关键字
-> xxx char
-> );
问题一虽然很简单但非常容易遇到,一定要规范自己的行文风格,避免低级报错。
此处再补充一个冷门的,非语法错误导致的1064报错原因:
在MySQL 8.0+ 版本中,数据库系统是不允许用户使用赋值语句grant来创建新用户的!!!
首先进入mysql数据库下查看user表的用户
mysql> select user from user;
+------------------+
| user |
+------------------+
| customer |
| damn |
| default_1 |
| default_2 |
| debian-sys-maint |
| mysql.infoschema |
| mysql.session |
| mysql.sys |
| root |
+------------------+
9 rows in set (0.00 sec)
接下来尝试使用grant语句创建新用户new并为其赋予权限
mysql> grant all privileges on *.* to 'new'@'%' identified by '123456';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123456'' at line 1
mysql>
可以发现这里是报错了的,所以在使用MySQL8.0版本创建用户时应该使用常见的 create 语句,创建后再赋值。
问题二、ERROR 1822 (HY000)
问题完整描述:
ERROR 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint ‘xxxx’ in the referenced table ‘xxxxx’
问题解析:该问题一般是在设置新表的外键约束时出现的,原因就是外键约束引用的不是外表的主键
问题解决:重新设置外键约束,或者修改外表的主键即可
问题三、ERROR 3619
问题完整描述:
错误号:3619::符号:ER_ILLEGAL_PRIVILEGE_LEVEL; SQLSTATE:HY000
消息:为%s指定了非法特权级别
问题解析:该问题是我在为用户赋值时发生的,我先对用户赋予了select,insert权限,当赋予updata权限时发生了该错误。我查阅了很多资料,最后还是没有解决该错误,如果读者朋友对该问题有自己的见解或解决方法,还请不吝赐教!
问题解决:暂无