mysql更新数据查询还是老数据_mysql update语句和原数据一样会更新么

平常使用 mysql ,必不可少的会用到 update 语句,不知道小伙伴有没有这样的疑问?

如果 update 语句和原数据一样会更新么?更具体的来说,如果更新的数据前后是一样的,MySQL 会更新存储引擎中(磁盘)数据么?

关于这个问题,在分析之前我们可以思考下:update语句和原数据一样,有必要更新么?理论上来讲是没有必要的。MySQL Server 层在执行 sql 时,其实是不知道是否是一样的,因此可以猜想,如果 MySQL 已经知道原数据的话,这样可以和 update 语句做对比,这样一样的话可以不用更新了。

那么 MySQL 在执行update 语句时,什么时候会读取原数据呢?这就涉及到 binlog 的数据格式,binlog 数据格式相关配置项为binlog_format,该配置取值范围如下:statement:逻辑SQL格式,通过mysqlbinlog工具可进行查看,就是sql语句;

row:记录的是行更改日志,对于statement格式binlog复制潜在的问题可通过row来解决;

mixed:默认使用statement格式,某些操作下使用row格式,比如uuid/now/user等不确定函数。

注意:在msyql 5.1版本之前默认都是基于sql语句(statement)级别的,statement格式的binlog会造成某些操作在主从复制时出现问题,比如now/rand/uuid等。

row 格式的 binlog 会记录镜像数据,针对 update 来说,

你可能感兴趣的:(mysql更新数据查询还是老数据_mysql update语句和原数据一样会更新么)