同样使用 MySql 预处理语句的语法,判定在当前数据库中,存在这个表,且有这个字段,那么才会执行修改字段的语句。
可重复执行的写法:
set @sql = 'select 1 from dual;';
select ' ALTER TABLE example_table MODIFY COLUMN email VARCHAR(500) DEFAULT '''' comment ''邮箱'' ;' into @sql
from dual where (select count(1) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='example_table' AND COLUMN_NAME='email')=1;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
复制代码
对表新增索引
原写法:
ALTER TABLE example_table add index idx_name (name) COMMENT '名称索引';
复制代码
要判定当前数据库中,这个表中,根据索引名查询,未查到该索引就进行添加索引。
INFORMATION_SCHEMA.STATISTICS 系统级的索引表,记载了全部的索引信息
可重复执行的写法:
set @sql = 'select 1 from dual;';
select 'ALTER TABLE example_table add index idx_name (name) COMMENT ''名称索引'';' into @sql from dual
where (select count(1) FROM INFORMATION_SCHEMA.STATISTICS where TABLE_SCHEMA=SCHEMA() and TABLE_NAME='example_table' and index_name='idx_name')=0;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
复制代码
插入一条新记载
原写法:
insert into example_table(name, age, email, create_time) VALUE ('jack', 18, 'jackaaa@gmail.com', now());