校验语法
规则
-- 校验关键字.[校验节点].[执行节点](校验语句/校验内容)
- 所有校验行以
--
开始 - 校验关键字:必须的
- 校验节点:可选的,所有的校验操作都将在校验节点完成,如果不指定,会使用SQL文件上指定的节点,如果文件未指定则会使用默认节点
- 执行节点:可选的,如果要指定执行节点,必须指定校验节点,如果没有指定执行节点,则SQL会在默认节点执行
- 校验内容:可以是SQL,或者是一些关键字
- 自定义的校验器一定要按照上诉规则进行开发
通用校验
起始界定符设置为
-- [
,-- ]
EXEC
语法
-- EXEC(校验语句)
sql
-- EXEC(校验语句)
-- [
sql
-- ]
解释
作用:当在校验节点的库中,执行括号中的校验SQL,如果校验SQL返回值为0,则会执行SQL脚本
EXEC 括号中的内容应为一个SQL语句,当然也可以自定义校验器,让校验内容为非SQL,sql脚本内容未做限制,可以为任何内容
使用示例
- 如果SQL文件没有指定校验节点,会在master节点执行校验语句,通过后,在master节点执行代码块
-- EXEC(select 0)
INSERT INTO table_1(id,name) value(1,'张三');
INSERT INTO table_1(id,name) value(2,'李四');
-- EXEC(select 0)
-- [
INSERT INTO table_1(id,name) value(1,'张三');
INSERT INTO table_1(id,name) value(2,'李四');
-- ]
- 多数据源使用,校验语句将在slave节点执行,如果校验通过,SQL将在slave节点执行
-- EXEC.slave(select 0);
INSERT INTO table_1(id,name) value(1,'张三');
INSERT INTO table_1(id,name) value(2,'李四');
-- EXEC.slave(select 0);
-- [
INSERT INTO table_1(id,name) value(1,'张三');
INSERT INTO table_1(id,name) value(2,'李四');
-- ]
- 多数据源使用,校验语句将在slave节点执行,如果校验通过,SQL将在master节点执行
-- EXEC.slave.master(select 0);
INSERT INTO table_1(id,name) value(1,'张三');
INSERT INTO table_1(id,name) value(2,'李四');
-- EXEC.slave.master(select 0);
-- [
INSERT INTO table_1(id,name) value(1,'张三');
INSERT INTO table_1(id,name) value(2,'李四');
-- ]
表操作
TABLE
语法
-- TABLE(表名)
sql
-- TABLE(表名)
-- [
sql
-- ]
解释
作用:当在校验节点的库中,没有找到与表名
相关的信息,则会执行SQL脚本
TABLE括号中的内容为表名
,sql内容没有限制为只能是创建表语句,但是建议是创建表语句
使用示例
-- TABLE(t_user)
create table t_user
(
id varchar(60) not null comment '主键id'
primary key,
name varchar(255) null comment '用户名'
)
comment '用户表';
-- TABLE(t_user)
-- [
create table t_user
(
id varchar(60) not null comment '主键id'
primary key,
name varchar(255) null comment '用户名'
)
comment '用户表';
-- ]
表属性/字段操作
ADD
语法
-- ADD(表名.列名)
sql
-- ADD(表名.列名)
-- [
sql
-- ]
解释
作用:当在校验节点的库中,没有找到与表名
和列名
相关的信息,则会执行SQL脚本
ADD的括号中有两个参数,分别为 表名
和列名
,sql没有限定为添加列的语句,但是建议为添加列的语句
使用示例
在t_user
表中,添加字段 age
# 当t_user表中没有age字段时,会执行以下SQL
-- ADD(t_user.age)
ALTER TABLE t_user
ADD age varchar(3) NULL COMMENT '年龄';
# 当t_user表中没有age字段时,会执行以下SQL
-- ADD(t_user.age)
-- [
ALTER TABLE t_user
ADD age varchar(3) NULL COMMENT '年龄';
-- ]
CHANGE_NAME
语法
-- CHANGE_NAME(表名.列名)
sql
-- CHANGE_NAME(表名.修改后的列名)
-- [
sql
-- ]
解释
作用:当在校验节点的库中,没有找到与表名
和修改后的列名
相关的信息,则会执行SQL脚本
CHANGE_NAME的括号中有两个参数,分别为表名
和修改后的列名
,sql没有限定为修改列名,但是建议为修改列表的语句
使用示例
将t_user
表中的name
字段的名称修改为u_name
-- CHANGE_NAME(t_user.u_name)
ALTER TABLE t_user
CHANGE name u_name varchar(255) NULL COMMENT '用户名';
-- CHANGE_NAME(t_user.u_name)
-- [
ALTER TABLE t_user
CHANGE name u_name varchar(255) NULL COMMENT '用户名';
-- ]
CHANGE_TYPE
语法
-- CHANGE_TYPE(表名.需要修改类型的列名.修改后的类型)
sql
-- CHANGE_TYPE(表名.需要修改类型的列名.修改后的类型)
-- [
sql
-- ]
解释
作用:当在校验节点的库中,表名
中的需要修改类型的列名
字段的数据类型,不是修改后的数据类型
,则会执行SQL脚本
CHANGE_TYPE的括号中有三个参数,分别为表名
和需要修改类型的列名
、修改后的数据类型
,sql没有限定为修改列的数据类型的语句,但是建议为修改列的数据类型的语句
使用示例
将t_user
表中的age
字段的数据类型修改为int
-- CHANGE_TYPE(t_user.age.int)
alter table t_user
modify age int null comment '年龄';
-- CHANGE_TYPE(t_user.age.int)
-- [
alter table t_user
modify age int null comment '年龄';
-- ]
CHANGE_COMMENT
语法
-- CHANGE_COMMENT(表名.需要修改备注的列名.修改后的备注信息)
sql
-- CHANGE_COMMENT(表名.需要修改备注的列名.修改后的备注信息)
-- [
sql
-- ]
解释
作用:当在校验节点的库中,表名
中的需要修改备注的列名
字段的备注,不是修改后的备注信息
,则会执行SQL脚本
CHANGE_COMMENT的括号中有三个参数,分别为表名
和需要修改备注的列名
、修改后的备注信息
,sql没有限定为修改列的备注信息的语句,但是建议为修改列的备注信息的语句
使用示例
将t_user
表中的age
字段的comment 修改为 实际年龄
-- CHANGE_COMMENT(t_user.age.实际年龄)
ALTER TABLE t_user
MODIFY age int NULL COMMENT '实际年龄';
-- CHANGE_COMMENT(t_user.age.实际年龄)
-- [
ALTER TABLE t_user
MODIFY age int NULL COMMENT '实际年龄';
-- ]
CHANGE_LENGTH
语法
-- CHANGE_LENGTH(表名.需要修改长度的列名.修改后的长度)
sql
-- CHANGE_LENGTH(表名.需要修改长度的列名.修改后的长度)
-- [
sql
-- ]
解释
作用:当在校验节点的库中,表名
中的需要修改长度的列名
字段的备注,不是修改后的长度
,则会执行SQL脚本
CHANGE_LENGTH的括号中有三个参数,分别为表名
和需要修改长度的列名
、修改后的长度
,sql没有限定为修改列的数据长度的语句,但是建议为修改列的数据长度的语句
使用示例
将t_user
表中的u_name
字段的长度修改为1024
-- CHANGE_LENGTH(t_user.u_name.1024)
ALTER TABLE t_user
MODIFY u_name varchar(1024) NULL COMMENT '用户名';
-- CHANGE_LENGTH(t_user.u_name.1024)
-- [
ALTER TABLE t_user
MODIFY u_name varchar(1024) NULL COMMENT '用户名';
-- ]