#Inception 额外功能说明
Inception支持将一段SQL语句按照语句之间相互不影响的原则拿得DDL及DML语句分开,也就是让相同表的DDL及DML语句不能在同一个语句块中执行,这个功能的用法是通过指定另一个新的选项来实现的,这个选项为--enable-split
,在指定这个选项之后,所有的其它选项(除指定线上地址的4个选项之外)都不起作用,只处理split选项。
而这个拆分原因是,如果在同一个块中执行,那么Inception对表的缓存结构在变化之后(因为表的修改导致),导致不能正确解析修改之前的binlog记录,这样导致备份会出问题,所以Inception采取一个简单折中的办法来处理这个问题。
这个功能的输出也是一个结果集,只是这个结果集只有3个列,分别为:
- ID: 第一个列是序号表示当前行被分成第几个语句块,这个值是从1开始的
- sql_statement: 第二个列表示的就是可以在一起的所有SQL语句, 都合在一起并且都以分号分开
- ddlflag: 第三个列表示的是当前被拆之后,可以一起执行的语句中,有没有
alter/drop table
语句,如果有则输出1,否则输出0,这主要是为了防止在Inception执行这两种语句时有可能带来危险,这样输出之后,可以为上层提供更友好的选择,可以做为一个提醒。
注意:如果第一个列返回的序号为0,那么此次结果集只会有一行,并且第二列中返回的值是出错信息,也就是说这此操作中是有错误的,具体错误可以直接看到,那么是不是有错误发生,只需要看序号值是不是为0就可以了。