精华内容
下载资源
问答
  • mysql 5.7中使用group by 会报如下错误: this is incompatible with sql_mode=only_full_group_by,这是因为mysql 默认启用了 ONLY_FULL_GROUP_BY

    mysql 5.7中使用group by 会报如下错误: this is incompatible with sql_mode=only_full_group_by,这是因为mysql 默认启用了 ONLY_FULL_GROUP_BY。
    可以在客户端(比如:navicat)查看sql_model配置参数:

    select @@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
    

    解决方式1:

    在客户端执行如下命令:

    set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
    ,NO_ENGINE_SUBSTITUTION';
    

    此时再次查询select @@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的设置会失效。

    解决方式2:

    可以修改mysql的my.cnf。一般在/etc/my.cnf
    添加如下配置,然后重启mysql:

    [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'
    
    展开全文
  • mode (为什么要设置请看:https://blog.csdn.net/qq_39234840/article/details/86536651) 大都问题都在于mysql5.7 版本中有了一个select mode(严格模式)最简单的方法就是设置sql_mode为空 首先查询: select @@...

    mysql安装配置

    yum search libaio # 检索相关信息

    yum install libaio # 安装依赖包

     

    yum list installed | grep mysql

    如果有,就先全部卸载,命令如下:

    yum -y remove mysql-libs.x86_64

     

    方法1:tar安装 (可自选版本)

    首先去官网下载需要安装的版本:https://downloads.mysql.com/archives/community/

    将下载的tar上传至/usr/local下

    使用tar -zxvf 解压,并且重命名mysql

    mv mysql-5.7.25 /usr/local/mysql

    检查mysql组和用户是否存在,如果没有则创建

    cat /etc/group|grep mysql

    groupadd mysql

    useradd -r -g mysql mysql  #useradd -r参数表示mysql用户是系统用户,不可用于登录系统

    创建data目录

    cd mysql

    mkdir data

    将/usr/local/mysql的所有者及所属组改为mysql

    chown -R mysql.mysql /usr/local/mysql

     在/etc目录下创建my.cnf  内容如下

    [mysqld]
    lower_case_table_names=1
    #设置mysql的安装目录
    basedir =/usr/local/mysql
    #设置mysql数据库的数据存放目录
    datadir = /usr/local/mysql/data
    #设置端口
    port = 3306
    
    socket = /tmp/mysql.sock
    #设置字符集
    character-set-server=utf8
    #日志存放目录
    log-error = /usr/local/mysql/data/mysqld.log
    pid-file = /usr/local/mysql/data/mysqld.pid
    #允许时间类型的数据为零(去掉NO_ZERO_IN_DATE,NO_ZERO_DATE)
    sql_mode=
    

     

    cd  /usr/local/mysql 

    chmod 777 data

    初始化mysql

    ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

    添加启动脚本和把启动脚本放到开机初始化目录

    cp support-files/mysql.server /etc/init.d/mysql

     启动mysql

    service mysql start    #status查看状态、stop关闭

    然后查看data中的mysqld.log  找到默认的随机密码

    mysql -u root -p   然后输入密码进入

    终端输入mysql -u root -p出现错误:-bash: mysql: command not found
          输入:alias mysql=/usr/local/mysql/bin/mysql

    重新设置密码

    set password=password('123456');

     

    方法2:rpm安装 (默认5.6版本)

    cd usr

    cd local

    mkdir mysql

    cd mysql

    wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

    如果提示-bash: wget: 未找到命令,请先执行 yum install wget 安装 wget

    如果提示certificate common name “www.mysql.com” doesn’t match requested host name

    “dev.mysql.com”.

    就wget --no-check-certificate http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

    安装mysql服务

    yum localinstall mysql-community-release-el7-5.noarch.rpm

    验证是否下载成功

    yum repolist enabled | grep "mysql.*-community.*"

    查看 MySQL 版本,执行

    yum repolist all | grep mysql

    看到 5.5, 5.7 版本是默认禁用的,因为现在最新的稳定版是 5.6

     

     

    通过 Yum 来安装 MySQL

    yum install mysql-community-server

         如果运行上面命令出现:

              错误:软件包:akonadi-mysql-1.9.2-4.el7.x86_64 (@anaconda)      。。。。

               解决方案:

           yum -y remove mariadb-libs

               运行

            yum install mysql-community-server

    启动 MySQL Server

    systemctl start mysqld

    查看 MySQL Server 状态

    systemctl status mysqld

    关闭 MySQL Server

    systemctl stop mysqld

     

    给mysql root用户修改密码

    设置MySQL 数据库root 用户的密码:

    # mysqladmin -u root password '123456'

    登录数据库:

    # mysql -u root -p

    输入密码

    mysql->

     

    简单的创建远程连接账号

    修改root权限 创建远程账号连接

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'chenyang' WITH GRANT OPTION; 

    (第一个root表示用户名,%表示所有的电脑都可以连接,也可以设置某个ip地址运行连接,第二个chenyang表示密码)

    flush privileges; 命令立即生效

     

    现在就可以用Navicat等数据库连接软件连接试试看啦!!!

     

    如果无法连接可能是防火墙的问题,查看解决:https://blog.csdn.net/qq_39234840/article/details/102686412


     

    Linux环境下mysql大小写敏感解决办法

    1、Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;

    2、用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;(注意!!!!!是[mysqld]下一行

    lower_case_table_names参数详解:

    lower_case_table_names= 0

    其中 0:区分大小写,1:不区分大小写

    设置账号和权限

    https://blog.csdn.net/qq_39234840/article/details/84328987

    设置mysql global.sql_mode

    (为什么要设置请看:https://blog.csdn.net/qq_39234840/article/details/86536651

    大都问题都在于mysql5.7 版本中有了一个select mode(严格模式)最简单的方法就是设置sql_mode为空

    首先查询:

    select @@sql_mode; 


    sql_mode中有很多,

    运行以下设置空

    set @@global.sql_mode ='';
    
    flush privileges; 

     

    MySQL查看最大连接数和修改最大连接数

    1、查看最大连接数

    show variables like '%max_connections%';


    2、修改最大连接数

    set GLOBAL max_connections = 200;

    mysql其他查询命令

    命令: show status;
    命令:show status like '%下面变量%'; 
    Aborted_clients                由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。 
    Aborted_connects            尝试已经失败的MySQL服务器的连接的次数。 
    Connections                     试图连接MySQL服务器的次数。 
    Created_tmp_tables          当执行语句时,已经被创造了的隐含临时表的数量。 
    Delayed_insert_threads     正在使用的延迟插入处理器线程的数量。 
    Delayed_writes                用INSERT DELAYED写入的行数。 
    Delayed_errors                用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。 
    Flush_commands            执行FLUSH命令的次数。 
    Handler_delete                 请求从一张表中删除行的次数。 
    Handler_read_first          请求读入表中第一行的次数。 
    Handler_read_key           请求数字基于键读行。 
    Handler_read_next           请求读入基于一个键的一行的次数。 
    Handler_read_rnd           请求读入基于一个固定位置的一行的次数。 
    Handler_update              请求更新表中一行的次数。 
    Handler_write                 请求向表中插入一行的次数。 
    Key_blocks_used            用于关键字缓存的块的数量。 
    Key_read_requests         请求从缓存读入一个键值的次数。 
    Key_reads                      从磁盘物理读入一个键值的次数。 
    Key_write_requests         请求将一个关键字块写入缓存次数。 
    Key_writes                      将一个键值块物理写入磁盘的次数。 
    Max_used_connections    同时使用的连接的最大数目。 
    Not_flushed_key_blocks   在键缓存中已经改变但是还没被清空到磁盘上的键块。 
    Not_flushed_delayed_rows      在INSERT DELAY队列中等待写入的行的数量。 
    Open_tables                  打开表的数量。 
    Open_files                     打开文件的数量。 
    Open_streams               打开流的数量(主要用于日志记载) 
    Opened_tables              已经打开的表的数量。 
    Questions                     发往服务器的查询的数量。 
    Slow_queries                要花超过long_query_time时间的查询数量。 
    Threads_connected       当前打开的连接的数量。 
    Threads_running          不在睡眠的线程数量。 
    Uptime                        服务器工作了多少秒。

    (参考:https://www.cnblogs.com/me80/p/7392669.html

    展开全文
  • 在使用mysql group分组时 出现sql_mode=only_full_group_by 错误 查了网上 都是说 设置sql_mode值 在配置文件中修改 windows 在安装目录下的my.ini 文件 Mac 或者Linux 在/ etc/my.cnf 在[mysqld]下面添加这段 sql_...

    在使用mysql group分组时 出现sql_mode=only_full_group_by 错误

    查了网上 都是说 设置sql_mode值

    在配置文件中修改

    windows 在安装目录下的my.ini 文件
    Mac 或者Linux 在/ etc/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

    那么设置这段到底是什么意思呢?

    各项的含义如下:
    STRICT_TRANS_TABLES
    在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制。必须设置,以后各项可能依赖于该项的设置
    NO_ENGINE_SUBSTITUTION
    如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
    ONLY_FULL_GROUP_BY
    对于GROUP BY操作,如果在SELECT中出现的单独的列,没有在GROUP BY子句中出现,那么这个SQL是不合法的
    NO_AUTO_VALUE_ON_ZERO
    该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了
    NO_ZERO_IN_DATE
    在严格模式下,不允许日期和月份为零
    NO_ZERO_DATE
    设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
    ERROR_FOR_DIVISION_BY_ZERO
    在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时MySQL返回NULL
    NO_AUTO_CREATE_USER
    禁止GRANT语句创建密码为空的用户
    PIPES_AS_CONCAT
    将“||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
    ANSI_QUOTES
    启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

    其中ONLY_FULL_GROUP_BY错误 主要是在select后得字段未在group by 子句中出现

    也就是说是咱写得sql有问题,而不是配置文件得原因,既然有这个约束 那么就证明 尤其存在意义,配置文件尽可能得不去修改(当然仅针对我这种小白)。

    那么既然知道是我们SQL得问题 我们就需要去修改自己得sql 可尝试在gourp by 子句后添加要查询得字段

    例如:

    select count(id),typeValue,typeName from dev group by typeValue
    

    那么只需要在 后面添加 typeName字段即可

    select count(id),typeValue,typeName from dev group by typeValue,typeName
    

    如果不能执行,那么就需要自己好好审读自己得sql,如果着急 可先使用上面得配置方案解决,后续有时间再更改。

    展开全文
  • 背景:今天小程序上线,关于报表类的sql语句在linux全部不能执行,而在windows环境下可以,找了很久 异常如下 查询出现如下异常: SELECT list contains nonaggregated column ‘xxxx.t.store_time’; this is ...

    背景:今天小程序上线,关于报表类的sql语句有些在linux全部不能执行,而在windows环境下可以,找了很久

    异常如下

    查询出现如下异常:

    	SELECT t.name,t.mobile FROM t_test t
    	WHERE t.code='1001'
    	group by t.time
    

    [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘testdb.t.time’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    这句话什么意思呢:
    一句话:“错误代码:1055与sql_mode = only_full_group_by不兼容”
    “错误代码:1055。SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列’testdb.t.time’,它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by不兼容”

    原因分析

    在MySQL5.7.5后,默认开启了ONLY_FULL_GROUP_BY,所以导致了之前的一些SQL无法正常执行,其实,是我们的SQL不规范造成的,因为group by 之后,返回的一些数据是不确定的,所以才会出现这个错误。

    解决办法

    第一种
    1、登录进入MySQL

    linux登录的:mysql -u username -p ,然后输入密码,输入SQL:show variables like ‘%sql_mode’;
    在这里插入图片描述

    2、编辑my.cnf文件

    文件地址一般在:/etc/my.cnf,/etc/mysql/my.cnf
    找到sql-mode的位置,去掉ONLY_FULL_GROUP_BY
    然后重启MySQL;
    **有的my.cnf中没有sql-mode,需要加入:

    sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    

    注意要加入到[mysqld]下面,我就是加入到其他地方,重启后也不生效,具体的如下图:
    在这里插入图片描述

    3、修改成功后重启MySQL服务,service mysql restart,重启好后,再登录mysql,输入SQL:show variables like ‘%sql_mode’; 如果没有ONLY_FULL_GROUP_BY,就说明已经成功了。

    在这里插入图片描述

    第二种_修改SQL

    不一定要禁用ONLY_FULL_GROUP_BY 给定这样的情况,根据mysql文档,“如果name不是t的主键或唯一的NOT NULL列,则此查询无效。在这种情况下,不可以推断出功能依赖性并发生错误。

    相反,可以使用此ANY_VALUE(‘my_column_name’) my_column_name 引用mysql文档,
    “在这种情况下,MySQL忽略每个名称组中的地址值的不确定性并接受查询。” 使用ANY_VALUE()来引用地址。
    因为出现这个问题,基本都是因为这个问题造成的,不确定返回字段可以使用ANY_VALUE(column_name)。

    错误sql
    	SELECT t.name,t.mobile FROM t_test t
    	WHERE t.code='1001'
    	group by t.store_time
    
    正确sql
    	SELECT ANY_VALUE(t.name),ANY_VALUE(t.mobile) FROM t_test t
    	WHERE t.code='1001'
    	group by t.time
    

    在这里插入图片描述

    ***order by

    展开全文
  • mode (为什么要设置请看:https://blog.csdn.net/qq_39234840/article/details/86536651) 大都问题都在于mysql5.7 版本中有了一个select mode(严格模式)最简单的方法就是设置sql_mode为空 首先查询: select @@sql_...
  • 解决思路:进入mysql 中查询sql_mode,拿到sql_mode的参数,然后把only_full_group_by取掉,复制剩余的参数,然后在my.cnf配置文件中粘贴进去,重启mysql服务 1mysql -uroot -p’密码’ 2mysql>select @@sql_...
  • 操作系统:Ubuntu 18.04 64位 MySQL版本:MySQL 5.7 一、问题描述 在本次发现的这个问题中,其原因是业务系统在对某张数据库表进行查询的时候,对查询结果做...this is incompatible with sql_mode=only_full_gr...
  • 编辑mysql配置文件(windows是my.ini, linux是my.cnf),在[mysqld]下增加如下配置: sql_mode ='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' 重启MySQL服务即可
  • 因为sql_mode中设置了only_full_group_by模式引起的,在only_full_group_by这种模式下,使用group by语句进行查询时,所要查询的语句必须依赖于group by子句中所列出的列,也就是group by要以查询的字段作为分组依据...
  • sql_mode3.1 问题背景3.2 为什么上面的查询语句不正确仍能执行呢?3.3 设置sql_mode四. 数据库的逻辑结构4.1 总体概览4.2 查看sql的执行周期4.2.1 查看最近几次的sql执行周期4.2.2 查看详细的执行周期五. 命中缓存...
  • 既然知道了问题,那么修改这个配置就可以了,找到MySQL的配置文件,在linux系统上/etc/my.cnf文件,查询sql_mode字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去: sql_mode = STRICT_TRANS_TABLES,NO_ZERO_...
  • 今天遇到mysql 8 升级后查询报错的问题,开始以为是sql有问题,测试环境跑了很多遍了,是没问题的,看日志发现是mysql版本问题,在网上找了以下网上的情况遇到很多和我一样的报错,就照着改了,修改sql_mode。...
  • Linux服务器上运行mysql group by 查询的时候报错: SELECT list is not in GROUP BY clause and contains nonaggregated column 'wisdom.b.id' which is not functionally dependent on columns in GROUP BY ...
  • linux中解决mysql的 this is incompatible with sql_mode=only_full_group_by 报的错误如下: 解决方案: set @@GLOBAL.sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO...
  • htmllinux下的mysql配置可能须要调整下:配置sql_mode是由于默认配置的查询结果排序时报错。查资料是因为sql_mode默认配置引发的。[mysqld]sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_E...
  • linux mysql 去掉ONLY_FULL_GROUP_BY配置

    千次阅读 2019-01-19 10:31:56
    linux mysql 去掉ONLY_FULL_GROUP_BY配置 ...第二步:查询sql_mode: 看到sql_mode包含ONLY_FULL_GROUP_BY 复制sql_mode的值 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DAT...
  • linux发布项目修改mysql默认配置。

    千次阅读 2018-06-14 10:23:57
    linux下的mysql配置可能需要调整下:配置sql_mode是因为默认配置的查询结果排序时报错。查资料是由于sql_mode默认配置引起的。[mysqld]sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGI...
  • linux 下mysql5.7+使用group by、order by报错ONLY_FULL_...2.查询sql_mode: SELECT @@GLOBAL.sql_mode; SELECT @@SESSION.sql_mode; SELECT @@sql_mode; 发现前面都有ONLY_FULL_GROUP_BY 3. 在命令行中...
  • 原因:这是由于mysql的sql_mode导致的,linux中打开mysql>执行查询语句:select @@sql_mode可以看到当前的sql_mode:STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_...
  • SELECT @@GLOBAL.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 将上面查询结果中的ONLY_...
  • SQL简单介绍(1)类似linux中的shell,统一标准,能够应用于各种数据库(2)SQL标准:SQL-92或SQL-99(3)SQL验证:SQL_MODE约束二. SQL常用分类(1)DDL:数据定义语言(2)DCL: 数据控制语言(3)DML: 数据操作语言(4)DQL: ...
  • select @@GLOBAL.sql_mode; 命令行中输入(重启失效) set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; 修改 my.ini 文件,重启 ...
  • 网上很多文章说如果遇到MySQL 1364 错误提示:#1364 - Field "" doesn‘t have a default value说明你配置了 “STRICT_TRANS_TABLES”但是你可能发现修改了my.cnf(windows 下...mode 查询还是带有STRICT_TRANS_TABLE...
  • 网上很多文章说如果遇到MySQL 1364 错误提示:#1364 - Field "" doesn't have a default value说明你配置了 “STRICT_TRANS_TABLES”但是你可能发现修改了my.cnf(windows 下为my.ini)重启...mode 查询还是带有STRIC...
  • 项目一开始使用的windows版本mysql(5.7.28),后来迁移到linux时,有一部分sql查询时出现ONLY_FULL_GROUP_BY的错误,原因是因为MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错(windows...
  • # 客户端设置 [client] port = 3306 # 默认情况下,socket文件应为/usr/local/mysql/mysql.socket,所以可以ln -s xx /tmp/mysql.sock ...# 解决 group_by 查询语句报错问题: sql_mode=only_full_gro...
  • group 查询的时候遇到这个错误 网上查了资料,得出结果是 mysql版本问题,修改数据库配置文件即可 找到数据库配置文件windows中my.ini文件或linux中...sql_mode= 只加一个这个就可以了。 然后重启一下mysql,搞定。 ...
  • 93. cliconfg-------SQL SERVER 客户端网络实用程序 94. Clipbrd--------剪贴板查看器 95. conf-----------启动netmeeting 96. certmgr.msc----证书管理实用程序 操作详解 net use ipipc$ " " /user:" " 建立IPC...

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

linux查询sqlmode

linux 订阅