首页 > 数据库 >记录一个sql_mode的问题

记录一个sql_mode的问题

时间:2023-12-25 15:22:20浏览次数:43  
标签:GROUP 记录 SQL 模式 mode sql MySQL

错误记录:
Error 1140: In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column '***'; this is incompatible with sql_mode=only_full_group_by


这个错误是因为SQL查询尝试在没有使用GROUP BY子句的情况下检索非聚合列.在MySQL中,当sql_mode设置为only_full_group_by时,SELECT列表中的所有列必须是聚合的(使用SUM/COUNT/MAX等函数)或包含在GROUP BY子句中.


要解决这个错误,可以将非聚合列包含在GROUP BY子句中,或者在SELECT列表中使用聚合函数.例如:

SELECT table_name.主键, COUNT(*) 
FROM table_name 
GROUP table_name.主键;

或者

SELECT MAX(table_name.主键), COUNT(*) 
FROM table_name;

也可以修改mysql的sql_mode.


在MySQL中,sql_mode是用来控制服务器的SQL模式的参数,它可以影响MySQL对SQL语句的解释和执行方式.sql_mode参数可以设置为多个值的组合,每个值代表一种特定的行为或规则.以下是一些常见的sql_mode设置:

  1. ONLY_FULL_GROUP_BY: 在GROUP BY聚合操作中,要求所有的SELECT列都必须在GROUP BY子句中出现,以避免模糊的查询结果.
  2. STRICT_TRANS_TABLES: 在严格模式下进行事务表处理,包括对非法值的插入、更新和截断操作的警告和错误.
  3. NO_ZERO_DATE: 禁止插入'0000-00-00'作为日期。如果启用此模式,将会禁止插入零日期值,并且会对此进行警告或错误.
  4. NO_AUTO_VALUE_ON_ZERO: 禁止将零值插入自增主键列,如果启用此模式,插入零值时将会产生警告或错误.
  5. STRICT_ALL_TABLES: 在严格模式下处理所有表,包括对非法值的插入、更新和截断操作的警告和错误.
  6. ERROR_FOR_DIVISION_BY_ZERO: 在发生除以零的情况时产生错误,而不是返回NULL.
  7. IGNORE_SPACE: 在比较操作符(=, <, >等)之后忽略空格字符.
  8. NO_ENGINE_SUBSTITUTION: 如果指定的存储引擎不可用,不要替换为其他可用的存储引擎,而是产生错误.
  9. PIPES_AS_CONCAT: 将"||"解释为字符串连接操作符而不是按位操作符.
  10. ANSI_QUOTES: 启用ANSI引号,要求双引号用于引用字符串,而单引号用于字符串字面值.
  11. HIGH_NOT_PRECEDENCE: NOT运算符的优先级高于AND和OR运算符.
    这些设置可以根据具体的数据库需求进行组合使用,以满足特定的SQL语句解释和执行要求.

查看当前的SQL模式,可以在MySQL命令行或客户端中运行以下命令:

SELECT @@sql_mode;

这将返回当前的SQL模式设置.


要修改SQL模式,可以通过修改MySQL配置文件(如my.cnf或my.ini)来永久更改SQL模式.在配置文件中找到[mysqld]部分,并添加或修改sql_mode参数,如下所示:

[mysqld]
sql_mode = "新的SQL模式设置"

在这里,"新的SQL模式设置"是你想要设置的SQL模式值.修改完成后并保存,然后重启Mysql程序.

net stop mysql
net start mysql

另外,也可以在MySQL命令行或客户端中使用SET语句来临时修改SQL模式,例如:

mysql -u 用户名 -p
SET GLOBAL sql_mode = "新的SQL模式设置";

需要注意的是,修改了全局的SQL模式设置对新连接生效,已存在的连接不会受到影响.如果要立即应用修改,可以使用以下命令:

SET GLOBAL sql_mode = "新的SQL模式设置";
SET SESSION sql_mode = "新的SQL模式设置";

这样即可实时更改当前会话的SQL模式设置.


MySQL通常安装在以下默认位置:

  1. linux中,MySQL可执行文件和相关工具通常安装在 /usr/bin/usr/sbin 目录下.MySQL的配置文件通常位于 /etc/mysql/etc/my.cnf.数据库文件通常存储在 /var/lib/mysql 目录下.
  2. windows中,MySQL 可执行文件和相关工具通常安装在 C:\Program Files\MySQL\MySQL Server\ 目录下.

标签:GROUP,记录,SQL,模式,mode,sql,MySQL
From: https://www.cnblogs.com/dogtools/p/17926154.html

相关文章

  • OB的SQL引擎_1
    SQL请求执行流程基本流程跟传统数据库没有区别。1、SQL请求进来后,先进行Parser语法解析、解析完成后看是否有内存缓存,若有缓存则直接到执行器,进行SQL执行。若无缓存,则进行硬解析。2、语法解析完成后,进行Resolver语义解析。--->Transformer进行查询改写。--->Optimizer优化器进......
  • centos 7.5 安装 sql server 2022
    官方文档地址:https://learn.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver16&tabs=rhel8选择RedHat8版本1.下载SQLServer2022(16.x)RedHat8存储库配置文件:sudocurl-o/etc/yum.repos.d/mssql-server.repohttps://pack......
  • Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL synta
    问题描述Causedby:java.sql.SQLSyntaxErrorException:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'orderwherestatus!='已完成''atline1问题解决最后发现时因为......
  • 无涯教程-PostgreSQL - Views(视图)
    视图是伪表。也就是说,它们不是真实表,视图可以表示真实表的子集,从普通表中选择某些列或某些行。由于视图不是普通表,因此您可能无法在视图上执行DELETE,INSERT或UPDATE语句,但是,您可以创建一个RULE来纠正在视图上使用DELETE,INSERT或UPDATE的问题。创建视图PostgreSQL视图是使用CR......
  • 【Mathematical Model】Python拟合一元一/二次方程(线性回归)
    ​        Python中可以使用多种库进行拟合方程,其中最常用的是NumPy和SciPy。NumPy是一个用于处理数组和矩阵的库,而SciPy则提供了大量的科学计算函数,包括拟合算法。1一元一次方程拟合    需要注意的是我们这里的方程需要我们自己定义好,然后再通过curve_fit......
  • 无法获得数据库 'model' 上的排他锁。请稍后重试该操作
    标题:MicrosoftSQLServerManagementStudio数据库"XXXX"的创建失败。(Microsoft.SqlServer.Smo)有关帮助信息,请单击:https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=15.0.18206.0+((SSMS_Rel).191029-2112)&EvtSrc=Microsoft.SqlServer.......
  • 无涯教程-PostgreSQL - Truncate(清空表)
    PostgreSQLTRUNCATETABLE命令用于从现有表中删除完整数据,您也可以使用DROPTABLE命令删除完整的表,但是它将从数据库中删除完整的表结构,如果您希望存储一些数据,则需要再次重新创建该表。TruncateTable-语法TRUNCATETABLE的基本语法如下-TRUNCATETABLEtable_name;......
  • 2023最新中级难度Ruby面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度Ruby面试题合集问:请解释一下Ruby中的方法可见性修饰符有哪些,分别代表什么含义?在Ruby中,方法可见性修饰符用于定义一个方法或变量在类和子类中的可见性和可访问性。这些修饰符可以控制其他代码对它们的访问权限。以下是Ruby中主......
  • 2023最新高级难度Ruby面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度Ruby面试题合集问:在Ruby中,如何使用CAPI来扩展Ruby的功能?请举例说明。在Ruby中,可以通过CAPI来扩展Ruby的功能。使用CAPI编写Ruby扩展可以实现高性能的代码,并且允许你利用C语言的强大功能和灵活性。以下是一个简单的例子,展示......
  • 1851_emacs_org-mode-babel的使用过百万为什么还会没钱
    Grey全部学习内容汇总:GitHub-GreyZhang/g_GNU:AftersomeyearsIfoundthatIdoneedsomefreeair,sodiveintoGNUagain!1851_emacs_org-mode-babel的使用过百万为什么还会没钱最近看了关于babel中资金问题的文章,觉得引起了我的一些思考,把这一份文章内容整理扩展一些自......