参考地址: http://blog.csdn.net/ccccalculator/article/details/70432123

因为在MySQL中使用group by 是总是出现1055的错误,这就导致了必须去查看是什么原因了,查询了相关的资料,现在将笔记记录下来,以便后面可以参考使用:

sql_mode:简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等

select @@sql_mode:使用该命令我们可以查看我们当前数据库的sql_mode

+ View Code

下面我们来看看sql_mode的各个值的含义:

ONLY_FULL_GROUP_BY:

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中

因为有only_full_group_by,所以我们要在MySQL中正确的使用group by语句的话,只能是select column1 from tb1 group by column1(即只能展示group by的字段,其他均都要报1055的错)

实例:

+ View Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

mysql> select * from tt1;

+----+-------+--------+

| id | name  | gender |

+----+-------+--------+

|  1 | xiong |      0 |

|  2 | ying  |      0 |

|  3 | cai   |      0 |

|  4 | zhang |      0 |

|  5 | li    |      1 |

|  6 | wang  |      1 |

+----+-------+--------+

6 rows in set (0.00 sec)

mysql> select * from tt1 group by name;

ERROR 1055 (42000):

+ View Code

所以我们要使用能正确的使用group by 的话就必须删除掉only_full_group_by

set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 可以使用该语句来将空格替换掉only_full_group_by,这样我们就可以使用

+ View Code

+ View Code

但是这种方法只是做了暂时的修改,我们可以更改配置文件my.ini

sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

STRICT_TRANS_TABLES:

在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制

NO_ZERO_IN_DATE:

在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告。

NO_ZERO_DATE:

在严格模式,不要将 '0000-00-00'做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告

ERROR_FOR_DIVISION_BY_ZERO:

在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误(否则为警告)。如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL

NO_AUTO_CREATE_USER:

防止GRANT自动创建新用户,除非还指定了密码。

NO_ENGINE_SUBSTITUTION:

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

三、据说是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模式:

  1. mysql> set @@sql_mode=TRADITIONAL;

3、STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。

将当前数据库模式设置为STRICT_TRANS_TABLES模式:

  1. mysql> set @@sql_mode=STRICT_TRANS_TABLES;

没有最好与最坏的模式,只有最合适的模式。需要根据自己的实际情况去选择那个最适合的模式!!!

另外说一点,这里的更改数据库模式都是session级别的,一次性,关了再开就不算数了!!!

也可以通过配置文件设置:vim /etc/my.cnf
在my.cnf(my.ini)添加如下配置:
[mysqld]
sql_mode='你想要的模式'

MySQL的sql_mode解析与设置相关推荐

  1. MySQL的sql_mode解析设置

    MySQL的sql_mode解析设置 sql_mode定义了对Mysql中sql语句语法的校验规则! sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允 ...

  2. 0基础学MySQL数据库—从小白到大牛(20)大小写规范、sql_mode的合理设置

    文章目录 一.SQL大小写规范 Windows和Linux平台区别 Linux下大小写规则设置 SQL编写建议 二.sql_mode的合理设置 介绍 宽松模式 vs 严格模式 模式查看和设置 一.SQ ...

  3. mysql text not null_【20181101】MySQL text类型的column设置为NOT NULL 导致主从1364

    环境 系统版本 : CentOS release 6.8 (Final) MySQL版本:5.6.29-log MySQL Community Server (GPL) MySQL主从配置信息 bin ...

  4. mysql dns反向解析_Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)

    Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve) 时间:2019-01-19 11:28作者:网友投稿 MySQL数据库收到一个网络连接后,首先拿到对方的IP地址, ...

  5. mysql数据库知识解析(一)

    文章目录 1. 数据库的介绍和环境搭建 1.1 数据库介绍 1.1.1 数据存储 1.1.2 理解数据库 1.1.3 MySQL 1.2 环境搭建 2. 数据类型及约束 2.1 SQL介绍&常 ...

  6. MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)

    Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELE ...

  7. Effective MySQL之深入解析复制技术

    下载地址:网盘下载 编辑推荐 <Effective MySQL之深入解析复制技术>主要内容: 掌握MySQL原生的异步数据复制技术的优缺点 找到MySQL的重要特性来改进数据复制性能,以应 ...

  8. mysql key_block_size_Mysql入门mysql Key_buffer_size参数的优化设置

    <Mysql入门mysql Key_buffer_size参数的优化设置>要点: 本文介绍了Mysql入门mysql Key_buffer_size参数的优化设置,希望对您有用.如果有疑问 ...

  9. mysql url格式,关于MySql链接url参数的设置

    最近整理了一下网上关于MySql 链接url 参数的设置,有不正确的地方希望大家多多指教: mysql JDBC URL格式如下: jdbc:mysql://[host:port],[host:por ...

最新文章

  1. 优惠劵系统库存设计浅谈
  2. Pandas通过某列不是NaN来进行筛选
  3. (正则表达式学习)正则表达式语法
  4. qt 中出现ld returned1exit status错误的几个原因
  5. 沙洋有几个微服务群_集群 分布式 微服务
  6. GitHub 发布了一款重量级产品,可直接运行代码
  7. mysql alter table_mysql ALTER TABLE 的用法
  8. “骗子”成民企院士第一人:把认真当信仰,人生就会开挂
  9. 【数据结构与算法】分离链接法散列表的Java实现
  10. JLU数据结构第七次上机实验解题报告
  11. 轨道交通计算机联锁系统应用,计算机联锁系统论文(2)
  12. vs2013 格式化代码 快捷键
  13. electron最小化托盘、禁用右键菜单
  14. 比较自然语言与计算机语言,计算机语言与自然语言的比较研究.pdf
  15. 学习C语言的心路历程
  16. Windows 内存机制说明
  17. python微信定时发送消息
  18. 【第二章 语言及文法】形式语言与自动机第二章个人总结复习笔记分享!(含文件、持续更新...)
  19. 让家长巧限孩子玩网络游戏、看网络电影
  20. R语言中的cor和cov

热门文章

  1. mysql 自定义函数
  2. 关于自动增涨外链的畅想
  3. jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法
  4. 那些年我在CSDN追过的安全白帽师傅,respect
  5. [python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录
  6. [python爬虫] 招聘信息定时系统 (一).BeautifulSoup爬取信息并存储MySQL
  7. OpenGL ES之3D渲染旋转的贴图立方体
  8. Swift之缓存文件处理
  9. LeetCode Algorithm 6. Z 字形变换
  10. LeetCode 算法 856. 括号的分数