mysql create table过程(二)
icky,create table竟然是在大名鼎鼎的mysql_select()过程中完成的,难道mysql认为create table...select...是select的一种特例。
create table...select...整体上分为2个过程:建表;插入数据。创建表的过程是整个select的prepare()过程中完成的(new JOIN的时候,result被初始化为select_create类型的,几个相关类的继承关系:select_result<-select_result_interceptor<-select_insert<-select_create;JOIN::prepare()->
select_create::prepare())。而insert的过程,则是在JOIN:exec的内完成的,具体的则是在send data的时候。
需要注意的是,select的表是会被加表锁的,直到整个操作完成(dispatch_command操作的最后会有close_thread_tables)
上面基本上是5.1 create table的处理逻辑了,5.5的处理过程也大致相同。