【问题描述】

某信息系统,使用MYSQL做数据库服务,版本5.0.45,在准备对表结构进行升级时,使用sql脚本对表结构进行更改,包括增加列、更改列等操作,为防止重复运行升级脚本而出现错误,拟在进行alter   table   之前检测某一字段是否存在,如:

1、添加列,则要检测该列是否存在,如果不存在才进行add操作,否则不执行任何操作;

2、更改列,检测该列是否存在,如果存在则更新,否则添加该列;

3、删除列,检测该列是否存在,存在才执行操作

【初步实现方法】

1、编写自定义函数,检测某个表或某个字段是否存在,从系统数据库   `information_schema`.`COLUMNS`   里查询

2、编写存储过程,在其中调用该函数查询某表或某表的某字段是否存在,并根据查询结果执行操作

【代码示例】

[code=SQL]

DELIMITER   $$

DROP   FUNCTION   IF   EXISTS   `db_waasai`.`CheckIsObjectExist`$$

CREATE   FUNCTION   `db_waasai`.`CheckIsObjectExist`(table_name   VARCHAR(50),colume_name   varchar(50))

RETURNS   BOOLEAN

BEGIN

DECLARE   t_count   TINYINT   UNSIGNED;

SELECT   count(0)   INTO   t_count   FROM   information_schema.COLUMNS   where   TABLE_NAME=table_name   &&   (isnull(colume_name)   ||   colume_name= ' '   ||   COLUMN_NAME=colume_name);

RETURN   t_count> 0;

END$$

DROP   PROCEDURE   if   EXISTS   `db_waasai`.`sp_update_106_107`   $$

CREATE   PROCEDURE   `db_waasai`.`sp_update_106_107`()

BEGIN

IF   NOT   CheckIsObjectExist( 'tbl_user_card ', ' ')   THEN

CREATE   TABLE   `tbl_user_card`   (

`u_id`   SMALLINT(6)   UNSIGNED   NOT   NULL   AUTO_INCREMENT,

`u_status`   TINYINT(1)   UNSIGNED   DEFAULT   '0 ',

`u_name`   VARCHAR(20)   NOT   NULL,

PRIMARY   KEY     (`u_id`)

)   ENGINE=MyISAM   DEFAULT   CHARSET=utf8   CHECKSUM=1   DELAY_KEY_WRITE=1   ROW_FORMAT=DYNAMIC;

END   IF;

IF   NOT   CheckIsObjectExist( 'tbl_user ', 'u_cards_num ')   THEN

alter   table   `tbl_user`   add   column   `u_cards_num`   int   (12)   UNSIGNED     DEFAULT   '0 '   NULL     after   `u_age`;

update   `tbl_user`   set   `u_cards_num`=1;

END   IF;

END$$

DELIMITER   ;

CALL   sp_update_106_107();

DROP   PROCEDURE   IF   EXISTS   `lsgw`.`sp_update_106_107`;

[/code]

【引玉】

这只是我实现目的的方法,之前也尝试过用   if   exists   之类的,但是始终没有成功,希望有朋友能够提供更简单、高效的方法

【说明】

示例代码是根据实际运行成功的代码改写的,并不保证完全可用,hoho

修改了下,支持UBB

[code=SQL]

DELIMITER $$

DROP FUNCTION IF EXISTS `db_waasai`.`CheckIsObjectExist`$$

CREATE FUNCTION `db_waasai`.`CheckIsObjectExist`

Mysql表结构升级_mysql表结构升级时根据字段是否存在执行相应操作相关推荐

  1. mysql 表结构关系_mysql 表关系 与 修改表结构

    mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远是在多的那张表中设置外键 """ 从左边的表思 ...

  2. mysql表结构定义_Mysql表结构定义及相关语法

    mysql语法及相关命令 1.每个sql命令都需要使用分号来完成 2.可以将一个命令写成多行 3.可以通过\c来取消本行命令 4.可以通过\g.exit.ctrl+c或者quit来退出当前客户端 5. ...

  3. mysql表结构定义_mysql 表结构及基本操作

    说明在mysql语句中,sql语句总共分四种 a.DDL数据定义语句=>常用的ddl语句有(CREATE[创建],DROP[删除],ALTER[修改表结构]) b.DML数据操作语句=>常 ...

  4. mysql查看表结构修改记录表_MySQL 表结构查看以及表结构修改

    使用MySql数据库时,如果对表字典不够熟悉,我们就需要查看表结构.如果数据库是在远程linux上部署,很多时候我们只能通过mysql的命令来查看表结构.同样,如果我们想要修改表结构,添加.删除.修改 ...

  5. mysql中修改表结构语法_MySQL表结构修改详解

    MySQL修改表的语法 ========================= 增加列[add 列名] ========================= ①alter table 表名 add 列名 列 ...

  6. mysql 表空间收缩_mysql表碎片清理和表空间收缩

    mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式) OPTIMIZETABLE [tablename],当然这种方式只 ...

  7. mysql表和表的关系_mysql表与表之间建关系

    2.浪费硬盘空间 3.扩展性极差 上述的弊端产生原因类似于把代码全部写在一个py文件中,应该怎么做?  >> 解耦合! 将上述两张表拆成员工的部门两张表 分析表数据之间的关系:多个员工对应 ...

  8. mysql BDB支持表锁吗_mysql 表锁问题

    本文转自:http://www.cnblogs.com/itdragon/p/8194622.html MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整 ...

  9. mysql表不存在_MySQL表不存在。 但它确实(或它应该)

    MySQL>表不存在. 但它确实(或它应该) 我确实更改了MySQL安装的datadir,并按照一些步骤运行正常. 我所拥有的每个基地都正确地移动了一个. 我可以连接和使用数据库,甚至SHOW ...

最新文章

  1. 高版本linux安装gamit,求助(Ubuntu14.1上安装GAMIT10.5过程中错误提示如下)
  2. 接收服务器显示帧控制错误,Websocket连接关闭,出现错误“接收到意外的继续帧”...
  3. 阿里排查Java问题工具清单!
  4. 讨论下 Java 流文件读写缓存大小设置的问题
  5. javascript map 排序_数据结构-JavaScript字典结构的编程实现
  6. Apache Jmeter 压测入门
  7. C++ p63作业 2
  8. Linux开机自动启动软件/可执行程序方法
  9. php 赋值给 dom对象,详解PHP原生DOM对象操作XML的方法
  10. python指定时间范围数据_Python提取特定时间段内数据的方法实例
  11. Bootstrap(5)栅格系统
  12. 小明开了一家糖果店、把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖 小朋友来买糖的时候,他就用两种包装来组合,当然有些糖果数目是无法组合出来的,比如要买10颗糖 在这种包装情况下,最大不能买到
  13. ThinkPHP去除url中的index.php
  14. Linux | 记一次Linux服务器被入侵后的检测过程
  15. 阻尼牛顿法_python
  16. 题解 JZOJ 1353.渡河问题
  17. 我的世界服务器配置文件
  18. Linux开机自启动
  19. 转:细数国内市场智能语音开放平台有哪些?
  20. Rabbit health check failed

热门文章

  1. Qt 3D的未来展望
  2. Java一种错误的实例化方法:在默认无参构造函数中进行实例化
  3. STM32的ADC笔记
  4. linux ora 00119,ORA-00119和ORA-00132的解决方案
  5. python提供了_Python中 为我们提供了一些独特的解决方案的方法特性
  6. html 形成打印数据,用HTMLTestRunner生成报告,无法打印print的内容
  7. 逆向查找_CTFer成长之路--一道数独逆向题目解题过程(算法分析、查找线索)...
  8. 异步接口同步返回_同步|异步
  9. Cpp 对象模型探索 / 静态局部对象只构造一次的原因和执行析构的方法
  10. L、TEXT()、_TEXT()和_T()的区别