首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL-this is incompatible with sql_mode=only_full_group_by错误解决方法

一、原理层面        这个错误发生在mysql 5.7 版本及以上版本会出现问题:        mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY...很多5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。...由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误...,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 重启mysql服务。...2.临时性修改sql_mode,但是重启mysql数据库服务之后,ONLY_FULL_GROUP_BY还会出现

8.9K30

MySQL5_存储过程-sql编程-函数-触发器-用户管理

2位开始取3个字符,起始位置1开始 (4).字符串拼接 select concat(sid,sname,age,sex,city) from stuinfo; mysql> select concat...自动调用的 3、是一个事务,可以回滚 (1)触发器的类型(触发事件) 1、insert触发器 2、update触发器 3、delete触发器 (2)创建触发器 #语法: Create trigger 触发器名...user 'ruidong'@'%' identified by '123456'; (2)删除用户 语法:drop user 用户 drop user ruidong; (3)增加用户权限 #python...#添加这条指令忽略mysql权限问题,直接登录 4.启动mysql服务: /etc/init.d/mysql restart 或者 service mysql restart 5.mysql 直接进入.../etc/init.d/mysql restart #特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了 #而是加密后的用户密码存储于authentication_string

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

技术分享 | 改写 mysqldump 解决 DEFINER 问题

二、问题原因 我们先来看下为啥会出现这个报错,那就得说下 MySQL 中一个很特别的权限控制机制,像视图、函数、存储过程、触发器等这些数据对象会存在一个 DEFINER 和一个 SQL SECURITY...%` trigger t_test --事件定义 CREATE DEFINER=`root`@`%` EVENT `e_test` DEFINER:对象定义者,在创建对象时可以手动指定用户,不指定的话默认为当前连接用户...四、版本选择 改之前需要先选个 MySQL 版本,对比了下几个 MySQL 5.7.27 以上的版本,发现其 mysqldump.c 的源码是一样的,而 MySQL 8.0 之后则完全变了。...九、小结 本次通过直接修改 mysqldump 源码的方式,比较好的解决了 DEFINER 问题,另外改写后的 mysqldump 源码拿到 Windows 环境下编译后是可以直接使用的,亲测有效,...其实也可以通过类似的方式来实现异构数据库的迁移,比如从 MySQL移到其他数据库时,可以通过修改 mysqldump 源码来完成字段类型映射与语法转换,也是一种思路。 ----

1.6K30

Mysql服务器SQL模式 (官方精译)

模式会影响MySQL支持的SQL语法以及数据验证检查的效果。这使得在不同的环境中使用MySQL变得更容易,并且可以MySQL与其他数据库服务器一起使用。...请参见第13.7.1.2节“CREATE USER语法”, 第13.7.1.3节“DROP USER语法”和 第13.7.1.1节“ALTER USER语法”。...例如,在非严格的SQL模式下,字符串插入 'abc'到整数列中会导致值转换为0,并出现警告: mysql> SET sql_mode = ''; Query OK, 0 rows affected...这会导致CREATE TABLE5.6到5.7.4 的语句复制,如果它们包含这样的TIMESTAMP列,则会失败。...在以下情况下,您将遇到与SQL模式更改相关的复制不兼容问题MySQL 5.6主站和5.7站 基于语句的复制 如前所述,SQL语句在MySQL 5.6和5.7中产生不同的结果

3.3K30

MySQL 5.6MYSQL 5.7 应用迁移有什么问题,升级后打脸又降回去

问题3 BINLOG 复制容易出现数据复制的问题,基于MYSQL.5.7 基于这个问题,推出了 GTID 等方式来进行功能上的增强和为MYSQL 数据复制拓扑上的稳定性上做出的改善方案。...基于数据库的复制方式,数据一致性,内存管理,句柄管理高并发等问题MYSQL 5.6 升级到MYSQL 5.7 好处是非常多的,尤其到了MYSQL5.7 的后面版本。...但但但,为什么升级后,又回退了,这个就是今天要说的 1 升级前,开发与DB 进行了评估,忽略了MYSQL 5.6MYSQL5.7 之间的语法的不同,以及一些配置的问题。...MYSQL 5.7 问题1 语句撰写的语法变化,在MySQL 5.6中存在大量不符合SQL语法的一些写法,比如下面的关于union all 与 limit 1 的写法在 MySQL 5.6中可以被接受...这里我们只需要在建立数据的时候数据库设置为 CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin; 在导入数据即可,MYSQL5.7就可以和

36321

每日一面 - MySQL 大表添加一列

问题参考自: https://www.zhihu.com/question/440231149 ,mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。...针对 MySQL 5.6(不包含)之前的版本,通过触发器一个表的更新在另一个表上重复,并进行数据同步,当数据同步完成时,业务上修改表名为新表并发布。业务不会暂停。...触发器设置类似于: create trigger person_trigger_update AFTER UPDATE on 原有表 for each row begin set @x = "trigger...UPDATE"; Replace into 新表 SELECT * from 原有表 where 新表.id = 原有表.id; END IF; end; MySQL 5.6(包含) 以后的版本引入了在线...参考文档: MySQL 5.6: https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-operations.html MySQL 5.7:

2.5K10

升级到 MySQL 8.0,付出了惨痛的代价!

考虑到更新代码的好处,我们决定迁移到 8.0。下面分享我们如何解决 8.0 迁移项目的难题,以及在这个过程中发现的一些惊喜。...当最初确定项目范围时,可以明确的是,迁移到 8.0 会比迁移到 5.6 或 MyRocks 更困难。 当时,我们定制的 5.6 分支有 1700 多个代码补丁需要移植到 8.0。...移植并提交到 8.0 分支的补丁,用 5.6 提交信息进行了注释。由于我们需要筛选大量的补丁,将不可避免地出现移植状态上的差异,这些注释帮助我们解决了此类问题。...由 5.6 主/5.6 所组成的副本集开始,最终目标是包含 8.0 主/ 8.0 的副本集。我们遵循一个类似于 UDB MyRocks migration plan 的迁移规划。...8.0 表可能会使用新的 utf8mb4_0900 排序规则,即使对于由 5.6 的show create table生成的create语句也是如此,因为使用utf8mb4_general_ci 的 5.6

1.4K20

FacebookMySQL升级至8.0

考虑到代码更新的好处,Facebook决定迁移到 8.0。当他们最初确定项目的范围时,发现迁移到 8.0 比迁移到 5.6 或 MyRocks 更加困难。...移植并提交到 8.0 分支的补丁使用 5.6 提交信息进行了注释。不可避免地会出现移植状态的差异,因为他们需要筛选大量补丁,这些注释帮助他们解决了这些问题。...Facebook5.6 主/5.6 组成的副本集开始,最终目标是具有 8.0 主/8.0 的副本集。遵循了一个类似于UDB MyRocks 迁移的计划。...甚至是 5.6 的 show create table 生成的 create 语句,因为8.0 表可能会使用新的utf8mb4_0900排序规则,使用utf8mb4_general_ci的 5.6 模式没有明确指定排序规则...使用查询中列名进行自动转义的应用程序没有遇到这些问题。解决这个问题很简单,但追踪应用程序所有者和生成这些查询的代码库需要时间。 在 5.6 和 8.0 之间还发现了一些 REGEXP 不兼容问题

95730

升级到 MySQL 8.0,Facebook 付出的代价。。

点击关注公众号,Java干货及时送达 近日,Facebook 官博公布了他们的数据库版本 MySQL 5.6 升级到了 MySQL 8.0,并且在官博记录了复盘详细的升级过程。...考虑到更新代码的好处,我们决定迁移到 8.0。下面分享我们如何解决 8.0 迁移项目的难题,以及在这个过程中发现的一些惊喜。...移植并提交到 8.0 分支的补丁,用 5.6 提交信息进行了注释。由于我们需要筛选大量的补丁,将不可避免地出现移植状态上的差异,这些注释帮助我们解决了此类问题。...使用 RBR 还为我们提供了一个解决应用程序问题的替代解决方案,我们在一些副本集移动到 8.0 主实例时遇到了这个问题,将在后面讨论。MySQL数据库开发的 36 条军规建议你看下。...8.0 表可能会使用新的 utf8mb4_0900 排序规则,即使对于由 5.6 的show create table生成的create语句也是如此,因为使用utf8mb4_general_ci 的 5.6

72130

你还在使用set password修改密码吗?

官方文档可以看出,5.6 版本 alter user 十分鸡肋,几乎啥都干不了,只能用于设置用户的密码过期。5.7版本开始 alter user 才能用于修改密码,并且扩展出很多功能。...所以,5.6 不是不支持 alter user 语法,准确来说,是 5.6 不支持使用 alter user 语法修改用户密码。...官方答案是 create user on *.* 或者 update on mysql.* 我们来做个实验1,验证单独给 create user 权限: # 此例子,使用 5.6 或 5.7 版本测试都可以...4. set password 语法在不同版本支持的选项有区别 set password 语法在三个大版本中有修改和变化,事实上会有兼容性问题,如图 我们可以看出 5.6 版本 set password...所以我认为问题的最优解是,开发这套这套数据库账号管理平台的应用厂商,把底层修改数据库密码的逻辑 set password 语法 改为使用 alter user 语法

30130

MySQL数据库5事务、视图、触发器、函数、数据库的备份

语法:增加视图:create view 视图名 as SQL语句; ​ 删除视图:drop view 视图名; 例子 mysql> select * from user where name = 'zgh...'', salary decimal(10,2) not null default 0) charset utf8; mysql> delimiter // mysql> create trigger...:drop trigger 触发器名; 触发器的查看语法: show triggers\G; 五、存储过程 存储过程如同编程语言中的函数,我们先定义好它的功能,然后在以后使用的时候只需要调用它就可以了。...RIGHT(str,len) 字符串str 开始,返回后边开始len个字符组成的子序列 七、数据库的备份 目的:重要的数据保存下来。...注意:导入的时候不能出现和文件中相同的表名。

93030

mysql触发器的作用及语法

MySQL触发器语法具体解释. ㈠CREATE TRIGGER语法 CREATE TRIGGER trigger_name trigger_time trigger_event     ON tbl_name...FOR EACH ROW trigger_stmt 触发程序是与表有关的命名数据库对象,当表上出现特定事件时,激活该对象。...要想创建触发程序或舍弃触发程序,可使用CREATE TRIGGER或DROP TRIGGER语句 ·         触发程序不能调用数据返回client的存储程序,也不能使用採用CALL语句的动态...它必须是BEFORE触发程序,这是由于,须要在值用于更新行之前对其进行检查: mysql> delimiter // mysql> CREATE TRIGGER upd_check BEFORE...例一: mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); mysql> CREATE TRIGGER ins_sum

2K30

常用数据库 SQL 命令详解(下)

4.1、创建触发器 定义语法 CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event...CREATE TRIGGER trig1 AFTER INSERT ON t_user FOR EACH ROW INSERT INTO t_time VALUES(NOW()); 创建有多个执行语句的触发器语法...,没啥问题,但是如果要对test_db表进行分库分表,这个时候问题就来了,如果水平分库,这个时候向test_db_1、test_db_2中插入数据,就会出现相同的ID!...在 MySQL 的UUID()函数中,前三组数字时间戳中生成,第四组数字暂时保持时间戳的唯一性,第五组数字是一个IEEE 802节点标点值,保证空间唯一。...七、总结 本文主要围绕 Mysql 中常用的语法进行一次梳理和介绍,这些语法大部分也同样适用于其他的数据库,例如 oracle、sqlserver、postgres 等等,在数据操作栏,除了分页函数以外

93320

mysql触发器的作用及语法

MySQL触发器语法具体解释. ㈠CREATE TRIGGER语法 CREATE TRIGGER trigger_name trigger_time trigger_event     ON tbl_name...FOR EACH ROW trigger_stmt 触发程序是与表有关的命名数据库对象,当表上出现特定事件时,激活该对象。...要想创建触发程序或舍弃触发程序,可使用CREATE TRIGGER或DROP TRIGGER语句 ·         触发程序不能调用数据返回client的存储程序,也不能使用採用CALL语句的动态...它必须是BEFORE触发程序,这是由于,须要在值用于更新行之前对其进行检查: mysql> delimiter // mysql> CREATE TRIGGER upd_check BEFORE...例一: mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); mysql> CREATE TRIGGER ins_sum

3.4K10

MySQL 到 openGauss 的数据库对象迁移实战演练

工具链:支持基于默克尔树的数据校 实现基于默克尔树的数据实时校验工具,支持 MySQL 数据迁移到 openGauss 时,源端与目的端数据全量和增量校验。...上一篇学习了 Oracle 11g 迁移到 openGauss,本篇就来分享一下使用 chameleon 工具进行 MySQL 到 openGauss 的数据库对象迁移实践。 软件安装 1....除了基础数据同步,chameleon 还支持视图、触发器、自定义函数、存储过程 MySQL移到 openGauss。...若无法翻译或者翻译出现error的情况为空;openGauss不支持的字段被注释 视图迁移 1. mysql 构造视图数据。...DELIMITER // CREATE TRIGGER del_log AFTER DELETE ON test1 FOR EACH ROW BEGIN INSERT INTO test2(id,name

2.6K10

MySQL数据库之触发器

1 引言         本文是对MySQL中触发器的总结,触发器概念出发,结合实例对创建触发器、使用触发器、删除触发器进行介绍。...如果定义了触发器,当数据库执行这些语句的时候就会激活触发器执行相应的操作,触发程序是与表有关的命令数据库对象,当表上出现特定事件,激活该对象。   ...3创建触发器   (1)创建只有一条执行语句的触发器   语法结构如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name...(2)创建有多个执行语句的触发器         语法结构如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name...,是可选参数,如果省略则表示当前数据库中删除触发器。

1.6K10

2020-01-20:mysql中,一张表里有3亿数据,未分表...

4. Table1 中的数据拷贝到 Table2。 5. Table2 重命名为 Table1 并移除 Table1,释放所有相关的锁。...针对 MySQL 5.6(不包含)之前的版本,通过触发器一个表的更新在另一个表上重复,并进行数据同步,当数据同步完成时,业务上修改表名为新表并发布。业务不会暂停。...触发器设置类似于: create trigger person_trigger_update AFTER UPDATE on 原有表 for each row begin set @x = "trigger...UPDATE"; Replace into 新表 SELECT * from 原有表 where 新表.id = 原有表.id; END IF; end; MySQL 5.6(包含) 以后的版本引入了在线...,比如会话A执行了多条更新语句期间,另外一个会话B做了表结构变更并且先提交,就会导致 slave 在重做时,先重做 alter,再重做 update 时就会出现复制错误的现象。

79710
领券