mysql [err] 1055错误解决
在使用mysql是在navicat中查询一条简单语句使用了 select * from table 虽然查询成功了,但是报了
网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;网站建设、成都网站设计收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了十载的创新互联网站建设公司。
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 错误.
在MySQL5.7之后,sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。
ONLY_FULL_GROUP_BY模式要求select语句中查询出来的列必须是明确的(其他语句也是一样)。
以SQL语句 select columes from table group by list 为例:columns必须是聚集函数或者在group by后的表达式list中,并且list中必须包含主键,否则也会报错。
insert、update、delete语句都会报错(但不影响SQL语句的执行),因为这三种语句执行之前也会执行查询操作。
以主键为id的表为例:
执行sql语句使sql_mode的模式去掉ONLY_FULL_GROUP_BY,但是重启服务会失效
注意: 在ubuntu 18中的mysql配置文件需要修改 mysqld.cnf , 其他系统的其他mysql版本需要根据特定情况查找需要修改的配置文件,如:windows中一般是 my.ini ,linux中可能是 my.cnf
在[mysqld]下面增加如下内容
验证: 再次在navicat中 select * from table 查询,已没有错误.
自动生成MySQL报错 1050 - Table 'sys_action' already exists
在第一个创建语句后面改成 Create Table sys_action if not exists即可,这样可以防止出错
MySql数据库提示1050 - Table 'blacklist' already exists
在Create Table 后面加上if not exists 即可避免类似的错误
或者是Create or Replace
sql数据库执行错误代码1055怎么解决?
错误代码1055。不过看了Expression里面的原因描述,我基本知道怎么回事了。原因是因为mysql中对 group by 用法的规定。严格意义上说,就是group by之后。select 的字段只能是group by的字段。或者需要加聚合函数的。在 oracle 中,一直有这项约定。所以直接就会报错。但是mysql 直到 5.7 版本之后才把这个要求明确限制起来。
很明显,这种问题两种思路:第一修改sql。按照规定的规范重写项目中所有有问题的sql。很明显代价太大。风险很高;第二种那就是把这种限制去掉,让功能继续像5.7之前的样子一样能跑。我果断选择了第二种。因为第一种代价太大。
解决办法:
1. 首先如何查看当前数据库使用的sql_mode:
select @@sql_mode;
2. 修改mysql的配置文件,删掉only_full_group_by这一项
注意:Mac:Mysql默认安装在/usr/local目录下,这个目录可以通过command+shift+G进入:如下图
windows下是的配置文件是my.ini,自己可以找一下。
问题解决完了,然后剩下两个问题:
1. mysql里面的 sql_mode 一共有哪些,并且mode的值各自代表什么含义。在网上查询了一下,结果如下:
MySQL5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES
1、ANSI模式:宽松模式,更改语法和行为,使其更符合标准SQL。对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。对于本文开头中提到的错误,可以先把sql_mode设置为ANSI模式,这样便可以插入数据,而对于除数为0的结果的字段值,数据库将会用NULL值代替。
将当前数据库模式设置为ANSI模式:切换到mysql命令下执行:set @@sql_mode=ANSI;
2、TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误,而不仅仅是警告。用于事物时,会进行事物的回滚。 注释:一旦发现错误立即放弃INSERT/UPDATE。如果你使用非事务存储引擎,这种方式不是你想要的,因为出现错误前进行的数据更改不会“滚动”,结果是更新“只进行了一部分”。
将当前数据库模式设置为TRADITIONAL模式:切换到mysql命令下执行:set @@sql_mode=TRADITIONAL;
3、STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。
将当前数据库模式设置为STRICT_TRANS_TABLES模式:切换到mysql命令下执行:set @@sql_mode=STRICT_TRANS_TABLES;
mysql 1055错误 是为什么
对于GROUP BY聚合操作,若select中的列没有在group by中出现,那么这句SQL是不合法的。
解决办法下my.cnf中添加以下几行
[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
在sql_mode 中去掉only_full_group_by
然后重启MySQL Server即可。
分享题目:mysql怎么解决1050错误 mysql error1005
当前URL:http://lswzjz.com/article/docoiij.html