2016-08-09 63 views
1

假设我有以下表MYSQL插入内部工作

create table MyTable 
(
    id int unsigned auto_increment primary key, 
    data varchar(4) not null 
); 

任何人都可以向我解释的具体步骤,当我插入一个来自客户端这样

insert into MyTable (data) values ("ABCD"); 

条目MYSQL服务器内部执行例如: (解析查询 - 检查权限 - ........ - 等)

我想知道MYSQL服务器从做的那一刻起的确切工作从客户端查询到数据存储成功的时间,每件事情都可以。

编辑:

我想知道在这两个存储引擎的步骤:MYISAM - InnoDB的

感谢

+1

如果您想知道这是因为纯粹的兴趣,为什么不阅读源代码?如果这背后还有另一个原因 - 为什么你不解释你遇到的真正问题? – Mjh

回答

3

你所要求的是源代码。 它在这里https://github.com/mysql/mysql-server

经过一番澄清之后,这里是一个(非常小的)想法,即除了将值存储到文件之外,MySQL(或其他数据库)必须做什么。 (MySQL)数据库必须具有ACID事务,因此必须做出很多强有力的保证,即文件不会。

它必须确保:

  • 原子性
  • 一致性
  • 隔离
  • 耐久性

此外,在大多数实际情况下,它必须保持至少一个指数,该指数文件才不是。

ACID和索引维护是完成的工作,需要花费时间才能追加到一个平面文件。

+2

啊,所以你不需要你所要求的,这是“从发送客户查询到数据成功存储的那一刻,MYSQL服务器所做的确切工作”。 – z5h

+0

@johnsamir - 基本上你想有人为你免费工作,这是正确的吗? – Mjh

+0

我只想弄清楚为什么在MYSQL数据库中插入数据比在普通的二进制文件中插入数据需要相当长的时间。对我的问题抱歉不完整。 –