mysql 修改表 重复执行_MySQL修改表-防止SQL重复执行

如何防止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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值