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

来源:互联网 发布:bms soc算法 编辑:程序博客网 时间:2024/05/16 16:01

如何防止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 0
原创粉丝点击