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;