一、MySQL事务提交过程(一)
MySQL作为一种关系型数据库,已被广泛应用到互联网中的诸多项目中。今天我们来讨论下事务的提交过程。
由于mysql插件式存储架构,导致开启binlog后,事务提交实质是二阶段提交,通过两阶段提交,来保证存储引擎和二进制日志的一致。
此目录节点只讨论binlog未打卡状态下的提交流程,后续会讨论打开binlog选项后的提交逻辑。
测试环境
OS:WIN7
ENGINE:
bin-log:off
DB:
测试条件
set autocommit=0;
------------------------------
--Table structure for `user`
------------------------------
DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (
`id`int(20) NOT NULL,
`account`varchar(20) NOT NULL,
`name`varchar(20) NOT NULL,PRIMARY KEY(`id`),KEY`id` (`id`) USING BTREE,KEY`name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
测试语句
insert into user values(1, 'sanzhang', '张三');
commit;
一般常用的DML:Data Manipulation Language 数据操纵语言,对表的数据进行操作,(insert、update、delete )语句
和 DCL:Data Control Language 数据库控制语言(创建用户、删除用户、授权、取消授权)语句
和 DDL:Data Definition Language 数据库定义语言,对数据库内部的对象进行创建、删除、修改的操语句,
均是使用MySQL提供的公共接口mysql_execute_command,来执行相应的SQL语句。我们来分析下mysql_execute_command接口执行的流程:
mysql_execute_command
{
switch (command)
{caseSQLCOM_INSERT:
mysql_insert();break;caseSQLCOM_UPDATE:
mysql