SQL 问题总结
目录
一,Mac安装MySQL
二,遇到的报错 ERRORS
三,MySQL ERROR 1064 (42000)
持续更新中...
一,Mac安装MySQL
安装之后出现很多问题,通过终端,服务关不掉,打不开,客户端登录不了。
更改配置文件(亲测有效):
MYSQL=/usr/local/mysql
PATH=$MYSQL/bin:$PATH
更改配置前,提示问题如下:
mysql -u root -p -- 输入密码错误(密码明明是正确的)
Sorry, try again.
ERROR! MySQL server PID file could not be found!
$ sudo mysql.server restart
ERROR! The server quit without updating PID file (/usr/local/mysql/data/freevision.local.pid).
$ sudo mysql.server status
ERROR! MySQL is running but PID file could not be found
$ sudo mysql.server start
Starting MySQL ............. ERROR! The server quit without updating PID file (/usr/local/mysql/data/freevision.local.pid).
ERROR 1045 (28000): Access denied for user 'freevision'@'localhost' (using password: NO)
if you lose this password ,please consult the section how to reset the root password in the maysql reference manual.
# 如果您丢失了此密码,请参考maysql参考手册中的“如何重置根密码”一节。
网上找的配置方法之后,以上问题消失(排错真真麻烦);
$ show databases; --查看数据库列表
$ show databases;
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 'show databases' at line 3
错误1064 (42000):SQL语法出错;检查MySQL服务器版本对应的手册,在第3行“显示数据库”附近使用正确的语法
-- 原因可能是因为 空格或 分号非英文状态下,再次输入即可。
二,遇到的报错 ERRORS
2-1:字段不存在ERROR 1054: 表单里创建的字段 不能访问/操作.
mysql> update students set age = 38 where id=1;
ERROR 1054 (42S22): Unknown column 'id' in 'where clause'
此处原因:创建的 字段前面有空格 !!! 正常情况下,字段会左对齐(如: name 和 Field 左对齐).
2-2:参数/值有问题:ERROR 1054
insert into students values(0,’郭靖’,18,175.00,'男',1);
ERROR 1054 (42S22): Unknown column '’郭靖‘' in 'field list'
插入失败,查看是否为标点问题,是否为字段问题.
此处为标点问题,将 双信号 改为 单引号 即可.
2-3:表已存在:ERROR 1050
ERROR 1050 (42S01): Table 'students' already exists
2-4:服务端连接失败:ERROR 2002 (连接数据库 账号和密码 都正确,依然连接失败;)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
原因1:服务端没有打开,所以连接失败.
原因2:服务端的配置有问题,打不开,需要重新配置.
注意:SQL服务端 有一个 Start MySQL when your computer starts up.选项(Mac端),勾选之后电脑开机SQL 默认开启,没有选的话,需要手动开启,或者在终端开启.
2-5:group by 操作报错sql_mode=only_full_group_by
MySQL> select count(*) from sc left join course on sc.cid = course.cid group by course.cid;
ERROR GROUP BY clause and contains nonaggregated column 'mysql_test.sc.SId' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因:
原因分析:MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错。
查询版本mysql> SELECT VERSION()
显示版本号为: 8.0.20
1、查看sql_modeSELECT @@sql_mode;
查询出来的值为:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2、去掉ONLY_FULL_GROUP_BY,重新设置值。
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
3,设置报错提示:
ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
原因以及解决:8.0以上已经取消了NO_AUTO_CREATE_USER这个关键字,删掉sql语句中的这个关键字,再次设置即可 。
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
3、上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行:
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
三,MySQL ERROR 1064 (42000)
1,使用了系统保留的关键字,如果非要使用,对关键字家反斜杠:`keyw0rd`
2,没有权限;
3,在给列设置string类型的时候,如果指定列的类型为varchar则需要指定该类型的最大‘容量值‘,若为char类型则不必。
4,创建表字符串类型:
MySQL:name varchar(10)
hive:name string
5,插入数据:
MySQL:insert into student_scores values
注意:insert into table student_scores values //不能带 table。
6,关键字重名
//报错:row_number() over(partition by departmentid,classId order by math) as row_number
//正确:row_number() over(partition by departmentId,classId order by math) as row_num
原因: as row_number 与 row_number() 属于关键字row_number重名;
7,注释不规范
MySQL做注释,#、-- 和注释内容之间需要加空格。否则报错。
ERROR 1064 (42000): xxxxx; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘默认60
-- 注释
问题1:
输入sql语句,以分号结束,发现没有结束,再打回车,分号,还是不完。 各种“退出”exit,quit,bye,均无效 。
原因:引号不对称
解决:加一个单引号,即可执行sql
单引号
问题2:
Mac文本编辑,提示标点不对:
解决:Mac使用文本编辑 SQL语句,可选用 Menio 字体。以防止标点不兼容;
精进有恒!