MySQL修改表-防止SQL重复执行

本文介绍了如何防止SQL语句在MySQL中被重复执行,主要方法是在执行前添加判断条件,通过存储过程来实现。文章列举了使用INFORMATION_SCHEMA COLUMNS表来获取表列信息的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何防止SQL被重复执行,一个很简单的办法就是在执行之前加上判断,如果满足给定条件,则执行,否则不执行。可以通过存储过程来实现。

       首先,给出修改表的一般操作,操作列表如下:   

操作 SQL语句
修改表名alter table t_book rename to bbb;
添加列alter table 表名 add column 列名 varchar(30);
删除列alter table 表名 drop column 列名;
修改列名alter table bbb change nnnnn hh int;
修改列属性alter table t_book modify name varchar(22); 
然后,以添加列为例,在添加之前如果列不存在则添加,如果列存在则不执行,这里面就需要获取到表结构,判断列是否存在。这里涉及到一个系统表,如下:

INFORMATION_SCHEMA COLUMNS表

COLUMNS表给出了表中的列信息。

标准名称

SHOW名称

注释

TABLE_CATALOG

 

NULL

TABLE_SCHEMA

 

 

TABLE_NAME

 

 

COLUMN_NAME

Field

 

ORDINAL_POSITION

 

参见注释

COLUMN_DEFAULT

Default

 

IS_NULLABLE

Null

 

DATA_TYPE

Type

 

CHARACTER_MAXIMUM_LENGTH

Type

 

CHARACTER_OCTET_LENGTH

 

 

NUMERIC_PRECISION

Type

 

NUMERIC_SCALE

Type

 

CHARACTER_SET_NAME

 

 

COLLATION_NAME

Collation

 

COLUMN_TYPE

Type

MySQL扩展

COLUMN_KEY

Key

MySQL扩展

EXTRA

Extra

MySQL扩展

COLUMN_COMMENT

Comment

MySQL扩展


该表给出了表结构中列的相关信息,包括:列名,列类型,列注释等等。
最后,写存储过程来实现功能。
--删除列
drop PROCEDURE if EXISTS add_col_homework;
create procedure add_col_homework() BEGIN 
IF EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='mydatabase' AND table_name='mytable' AND COLUMN_NAME='mycolumn')
THEN 
   ALTER TABLE `mytable`  DROP COLUMN `mycolumn`;
END IF;  
END;
call add_col_homework(); 
drop PROCEDURE if EXISTS add_col_homework;


---修改列名
drop PROCEDURE if EXISTS add_col_homework;
create procedure add_col_homework() BEGIN 
IF EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='mydatabase' AND table_name='mytable' AND COLUMN_NAME='mycolumn')
THEN 
   ALTER TABLE `mytable`  change  column mycolumn  mycolumnOther  varchar(30) not null comment '修改注释';
END IF;  
END;
call add_col_homework(); 
drop PROCEDURE if EXISTS add_col_homework;

-----修改列属性--
drop PROCEDURE if EXISTS add_col_homework;
create procedure add_col_homework() BEGIN 
IF EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='mydatabase' AND table_name='mytable' AND COLUMN_NAME='mycolumn' and COLUMN_COMMENT='原有注释' )
THEN 
   ALTER TABLE `mytable`  MODIFY `mycolumn` int not null comment '修改注释';
END IF;  
END;
call add_col_homework(); 
drop PROCEDURE if EXISTS add_col_homework;

drop PROCEDURE if EXISTS add_col_homework;
create procedure add_col_homework() BEGIN 
IF not EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='mydatabase' AND table_name='mytable' AND COLUMN_NAME='mycolumn' AND COLUMN_TYPE='varchar(20)' and COLUMN_COMMENT='原有注释')
THEN 
   ALTER TABLE `mytable`  MODIFY `mycolumn` varchar(20) not null comment '修改注释';
END IF;  
END;
call add_col_homework(); 
drop PROCEDURE if EXISTS add_col_homework;

--添加列
drop PROCEDURE if EXISTS add_col_homework;
create procedure add_col_homework() BEGIN 
IF not EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='mydatabase' AND table_name='mytable' AND COLUMN_NAME='mycolumn')
THEN 
   ALTER TABLE `mytable`  add COLUMN `mycolumn` varchar(20) not null comment '注释';
END IF;  
END;
call add_col_homework(); 
drop PROCEDURE if EXISTS add_col_homework;

最后,给出MySQL系统表连接: http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值