MySQL内部手册/MySQL源代码指南/sql/sql_update.cc中的一个代码块

1.8 /sql/sql_update.cc中的代码块

现在,我们已经从空中鸟瞰了源代码,让我们从地面上的蠕虫(这是MySQL开发人员的另一个名字——在这里打开笑声轨道)的角度来看一下。

int mysql_update(THD * THD,…){…if ((lock_tables(thd, table_list))) DBUG_RETURN(1);……init_read_record (thd,信息表、选择0,1);...而(!(错误= info.read_record(信息))& & ! (thd - >杀){…如果(!(错误=表- >文件- > update_row((字节*)表- >记录[1]),(字节*)表- >记录[0])))更新+ +;...if (table->触发器)table->触发器->process_triggers(thd, TRG_EVENT_UPDATE, TRG_ACTION_AFTER);... } ... if (updated && (error <= 0 || !transactional_table)) { mysql_bin_log.write(&qinfo) && transactional_table); ... }

下面是sql目录下的.c文件中的一段代码片段,特别是来自sql_update。cc,正如我们前面提到的,它在有UPDATE语句要处理时被调用。

整个例程使用处理程序对不可能的情况进行了许多错误检查,并且显示多个屏幕将是冗长的,因此我们截断了大量的代码。当你看到省略号(一行有三个点)时,表示“等等”。

那么,我们能从这段代码中学到什么呢?首先,我们看到它是相当传统的C代码。大括号会导致缩进,指令往往很紧凑,很少有不必要的空格,注释也很稀疏。

缩写很常见,比如thd代表线程,你只需要习惯它们。通常,结构将定义在一个单独的.h文件中。

例程名称有时长到足以解释自己。例如,您可能会猜测这个例程正在打开和锁定、在缓存中分配内存、初始化读取记录的进程、在循环中读取记录直到线程被杀死或没有更多可读的记录、为表存储修改过的记录,以及(在循环结束后)可能写入日志。顺便说一下,事务表通常是BDB或InnoDB表。

显然,我们已经选择了容易遵循的内容,并没有假装一切都是一帆风顺的。但这是真正的代码,你可以自己检查。