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
- MySQL修改表-防止SQL重复执行
- 脚本防止重复执行
- 防止程序重复执行
- mysql 防止插入重复数据sql和触发器
- mysql教程 sql 防止重复插入相同的记录实例
- mysql sql 防止重复插入相同的记录实例
- 防止程序被重复执行
- 防止shell脚本重复执行
- 防止程序被重复执行
- 防止jQuery效果重复执行
- 防止jquery重复执行动画
- jQuery防止动画重复执行
- delphi 防止程序重复执行
- SQL Server防止重复插入
- mysql 防止重复插入数据
- MYSQL 插入数据防止重复
- mysql 防止插入重复数据
- 可重复执行SQL
- Java回调函数
- VS2010中“工具>选项中的VC++目录编辑功能已被否决”解决方法
- nginx配置拒绝异常请求uri
- 学习笔记:boost lock-free queue
- ubuntu14上hadoop的搭建(1)
- MySQL修改表-防止SQL重复执行
- chinese
- 使用ccache大幅度加速gcc编译速度
- android开发步步为营之39:NotificationManager发通知
- chrome浏览器使用uploadify插件频繁崩溃的原因及解决办法
- 最近公共祖先LCA:Tarjan算法(介绍2)
- 结构模式之代理模式 静态代理
- C#中 Oracle实用随笔
- Cv照相机定标和三维重建