Mysql 检查表是否存在并创建表,检查列是否存在并新增、修改、删除列

2023-11-19

判断表是否存在,不存在就可新增

CREATE TABLE IF NOT EXISTS `example` (
  ...
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

判断表字段是否存在,不存在就可新增、修改、删除,移除修改列名

MySql中没有直接的语法可以在增加列前进行判断该列是否存在,解决方案是写一个存储过程来完成此任务。

参考:https://blog.csdn.net/huangjin0507/article/details/49330413

DROP PROCEDURE IF EXISTS Pro_Temp_ColumnWork;
DELIMITER$$
-- 1表示新增列,2表示修改列类型,3表示删除列
CREATE PROCEDURE Pro_Temp_ColumnWork(TableName VARCHAR(50),ColumnName VARCHAR(50),SqlStr VARCHAR(4000),CType INT)
BEGIN
DECLARE Rows1 INT;
SET Rows1=0;
SELECT COUNT(*) INTO Rows1  FROM INFORMATION_SCHEMA.Columns
WHERE table_schema= DATABASE() AND table_name=TableName AND column_name=ColumnName;
-- 新增列
IF (CType=1 AND Rows1<=0) THEN
SET SqlStr := CONCAT( 'ALTER TABLE ',TableName,' ADD COLUMN ',ColumnName,' ',SqlStr);
-- 修改列类型
ELSEIF (CType=2 AND Rows1>0)  THEN
SET SqlStr := CONCAT('ALTER TABLE ',TableName,' MODIFY  ',ColumnName,' ',SqlStr);
-- 删除列
ELSEIF (CType=3 AND Rows1>0) THEN
SET SqlStr := CONCAT('ALTER TABLE  ',TableName,' DROP COLUMN  ',ColumnName);
ELSE  SET SqlStr :='';
END IF;
-- 执行命令
IF (SqlStr<>'') THEN 
SET @SQL1 = SqlStr;
PREPARE stmt1 FROM @SQL1;
EXECUTE stmt1;
END IF;
END$$
DELIMITER ;



-- 当前数据库 TableName表名 ColumnName列名  SqlStr 字段参数,用来拼接sql语句
-- CType 类型 / 1 为新增 ,2为 修改 , 3 为删除
-- 新增列
-- CALL Pro_Temp_ColumnWork ('表名','字段名','字段参数 ', 1);
-- CALL Pro_Temp_ColumnWork ('表名','字段名','int(11) NULL DEFAULT NULL;', 1);
-- CALL Pro_Temp_ColumnWork ('example','status','int(11) NULL DEFAULT NULL;', 1);
-- 删除列
-- CALL Pro_Temp_ColumnWork ('example','status','', 3);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql 检查表是否存在并创建表,检查列是否存在并新增、修改、删除列 的相关文章

随机推荐

  • 深夜好文

    题图 https unsplash com oldskool2016 无论项目中还是面试都离不开装饰器话题 装饰器的强大在于它能够在不修改原有业务逻辑的情况下对代码进行扩展 权限校验 用户认证 日志记录 性能测试 事务处理 缓存等都是装饰器
  • 时间复杂度常见算法

    常见时间复杂度对应算法 注 if的时间复杂度为O 1 一层for循环时间复杂度为O n 两次for循环时间复杂度为O n 一个算法中有多个for 但都是单层for 时间复杂度为O n
  • C语言 每日一题

    C语言 每日一题 9 13 9 19 9月13日 星期一 题目一 有1 2 3 4个数字 能组成多少个互不相同且无重复数字的三位数 都是多少 题目二 输入一个int型整数 按照从右向左的阅读顺序 返回一个不含重复数字的新的整数 保证输入的整
  • Navicat导入Excel数据顺序变了

    项目场景 Navicat导入Excel数据 问题描述 从Excel表格中导入数据到数据库中 但是 在导入的过程中 我们常会发现数据顺序出现了问题 导致数据错位 给数据的处理带来了极大的麻烦 原因分析 这个问题的出现是由于数据库的默认排序规则
  • Jina AI 两周年

    文章导读 2 月是 Jina AI 的生日月 全球各地 Office 用妙趣横生的在线游戏 以及美味的食物 欢快的合照 共同为 Jina AI 庆生 2020 年 2 月 新冠病毒开始肆虐全球 世界各地都逐步进入抗疫紧急状态中 几乎在同一时
  • 【Python】WARNING: Ignoring invalid distribution -ip (c:\python39\lib\site-packages)

    问题描述 在Win10命令行中使用pip命令出现警告信息 WARNING Ignoring invalid distribution ip c python39 lib site packages 解决方案 进入警告信息中报错的目录 c p
  • MyISAM和InnoDB

    1 MyISAM 默认表类型 它是基于传统的ISAM类型 ISAM是Indexed Sequential Access Method 有索引的顺序访问方法 的缩写 它是存储记录和文件的标准方法 不是事务安全的 而且不支持外键 如果执行大量的
  • 8.3雾

    先上图 其实很简单 就是光照和雾的系数插值 雾出现在与摄像机的一定距离 在这个距离内 没雾 在这个距离外 越远雾越大 即雾的系数从0到1 光照系数从1到0 在shader中 代码如下 cbuffer cbFixed float gFogSt
  • 安川服务器输入输出信号,最全PLC输入输出各种回路接线!

    原标题 最全PLC输入输出各种回路接线 一 输入回路接线 输入电路是PLC接收信号的端口 对模拟量来说一般为0 40MA直流电流或0 10V直流电压信号 输入接线是指外部输入器件 任何无源的触点和集电极开路的NPN三极管 接通输入回路闭合
  • Nginx双机主备(Keepalived实现)

    前言 首先介绍一下Keepalived 它是一个高性能的服务器高可用或热备解决方案 起初是专为LVS负载均衡软件设计的 Keepalived主要来防止服务器单点故障的发生问题 可以通过其与Nginx的配合实现web服务端的高可用 Keepa
  • 截取鼠标指针的图片

    Windows下的鼠标经常会显示出不同的样子以提示当前的操作 所以对于很多程序来说截取鼠标指针当前的图片并进行分析是很有用处的 下面分析两种截取鼠标指针的图片的方法并给出一个示范程序 截取鼠标指针的图片首先要取得鼠标的句柄 然后用API函数
  • ESP32学习笔记05-串口事件方式读取数据

    串口中断方式处理数据 事件机构体 typedef struct uart event type t type lt UART event type size t size lt UART data size for UART DATA ev
  • leetcode 142.环形链表2

    leetcode 142 环形链表2 给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测
  • VASP - Bader Charge Analysis

    Bader电荷分析 用于分析原子周围的电荷密度 从而得到原子价电子数 下载 Bader Charge Analysis 工具包 下载地址为 http theory cm utexas edu henkelman code bader 下载
  • C++中的friend详细解析

    https blog csdn net u012861978 article details 52095607
  • 奇偶数排序

    题目描述 给定一个整数数组 请调整数组的顺序 使得所有奇数位于数组前半部分 所有偶数位于数组后半部分 要求时间复杂度为O n 分析与解法 最容易想到的办法是从头到尾扫描这个数组 每遇到一个偶数 就把他单独取出来 然后把该偶数后面的所有数往前
  • vulnhub之vegeta

    目录 一 主机发现 二 端口扫描 四 信息收集 五 cyberchef解密 1 两道base64解密 2 save保存 3 qrcode module 4 二维码提取工具zbaring 六 大字典跑目录 七 bulma 八 音频分析软件au
  • spark-2.2.2-bin-hadoop2.7 安装

    1 上传spark 2 2 2 bin hadoop2 7 tgz 2 解压文件 tar zxvf spark 2 2 2 bin hadoop2 7 tgz C usr local 3 进入conf 下把spark env sh temp
  • 『NLP经典项目集』05:新年到,飞桨带你对对联

    基于seq2seq的对联生成 对联 是汉族传统文化之一 是写在纸 布上或刻在竹子 木头 柱子上的对偶语句 对联对仗工整 平仄协调 是一字一音的汉语独特的艺术形式 是中国传统文化瑰宝 这里 我们将根据上联 自动写下联 这是一个典型的序列到序列
  • Mysql 检查表是否存在并创建表,检查列是否存在并新增、修改、删除列

    判断表是否存在 不存在就可新增 CREATE TABLE IF NOT EXISTS example ENGINE InnoDB AUTO INCREMENT 1 DEFAULT CHARSET utf8 判断表字段是否存在 不存在就可新增