MySQL_问题汇总

MVCC中的alter

在这里插入图片描述

MYSQL怎么知道binlog是完整的

一个事务的binlog是有完整格式的

​ statement 格式的binlog,最后会有COMMIT;

​ row格式的binglog,最后会有一个XIDevent

另外,在 MySQL 5.6.2 版本以后,还引入了 binlog-checksum 参数,用来验证 binlog 内容的正确性。对于 binlog 日志由于磁盘原因,可能会在日志中间出错的情况,MySQL 可以通过校验 checksum 的结果来发现。所以,MySQL 还是有办法验证事务 binlog 的完整性的。

redo log 和binglog怎么关联起来的

回答:它们有一个共同的数据字段,叫 XID。崩溃恢复的时候,会按顺序扫描 redo log:

如果碰到既有 prepare、又有 commit 的 redo log,就直接提交;

如果碰到只有 parepare、而没有 commit 的 redo log,就拿着 XID 去 binlog 找对应的事务。

ON DUPLICATE KEY UPDATE

如果你插入的记录导致一个UNIQUE索引或者primary key(主键)出现重复,那么就会认为该条记录存在,则执行update语句而不是insert语句,反之,则执行insert语句而不是更新语句。

IGNORE**** ****ignore

若有导致unique key 冲突的记录,则该条记录不会被插入到数据库中.

相同数据,mysql还会执行修改吗

会的 ,mysql 不确定修改的id相同的行的a的值是否是2

update set a = 2 where id = 1; 不能确定修改的a是否等于2,真正执行修改过程

update set a=2 where id = 1 and a = 2; 不会执行修改过程,

mysql> CREATE TABLE `t` (
`id` int(11) NOT NULL primary key auto_increment,
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB;
insert into t values(1,2);
mysql> update t set a=2 where id=1;

在这里插入图片描述
在这里插入图片描述

发布了48 篇原创文章 · 获赞 31 · 访问量 4555

猜你喜欢

转载自blog.csdn.net/qq_39787367/article/details/103861936