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

2023-10-29

很多时候只有自己遇到了问题才会着手去解决,这次刚好遇到了Mysql检查列是否存在的问题,顺便看到了网上其他大神也遇到过该问题就当作经验自己积累下来吧。

在MYSQL中,新增、修改、删除列时不能进行IF EXISTS判断,IF语句只能出现在存储过程当中,故博主用存储过程的方法新增、修改、删除列,修改列名称。

DROP PROCEDURE IF EXISTS Pro_ColumnWork;
DELIMITER$$
-- 1表示新增列,2表示修改列类型,3表示修改列名称,4表示删除列
CREATE PROCEDURE Pro_ColumnWork(TableName VARCHAR(50),ColumnName VARCHAR(50),CType INT,SqlStr VARCHAR(4000))
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,' CHANGE  ',ColumnName,' ',SqlStr);
-- 删除列
ELSEIF (CType=4 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 ;


-- CALL Pro_ColumnWork ('BaseInfo','Name2',4,'VARCHAR(50)');
-- CALL Pro_ColumnWork ('BaseInfo','Abc',4,'VARCHAR(30)');
Mysql没有直接的语法可以在增加列前进行判断该列是否存在,需要写一个存储过程完成同样任务, 下面例子是:在 iyb_ha_category_campaign
表中增加一列company_id列 :
CREATE PROCEDURE add_column() BEGIN
IF EXISTS(SELECT
		1
	FROM
		information_schema.`COLUMNS`
	WHERE
		`TABLE_SCHEMA` = 'broker_00'
	AND `TABLE_NAME` = 'iyb_ha_category_campaign'
	AND `COLUMN_NAME` = 'company_id')
THEN
	 ALTER TABLE `broker_00`.`iyb_ha_category_campaign`  DROP COLUMN `company_id`;  
END IF;
	 ALTER TABLE `broker_00`.`iyb_ha_category_campaign`
	 ADD COLUMN `company_id`  varchar(50) CHARACTER SET utf8 NULL DEFAULT null COMMENT '关联顶级公司id' AFTER `campaign_id`;
END;
CALL add_column(); -- 执行该存储过程
DROP PROCEDURE IF EXISTS add_column; 


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

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

  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 从按日期时间排序的 MySQL 表中获取用户的最后一个条目

    我有一张看起来像这样的桌子 USERNAME DATA DATETIME Jhon text1 2010 06 01 16 29 43 Mike text2 2010 06 01 16 29 22 Silver text3 2010 05
  • MySql - 复制监控工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个主 从 MySql 复制 我正在寻找一个允许我监视复制的工具 查看它没有错误 检查滞后等 我更喜
  • Galera 集群问题

    我想在我们的生产环境中使用Galera集群 但我有一些顾虑 每个表必须至少定义一个显式主键 每个表必须运行在InnoDB或XtraDB存储引擎下 分批处理您的大额交易 例如 不要让一个事务插入 100 000 行 而是将其分成更小的块 例如
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • 如何在 MySQL 中求和时间?

    正如您在图片中看到的 我有一份停机报告 显示了所选工厂在选定日期的停机时间 现在我想添加所有的值 Time Duration 列并将其显示在附近的单独显示中 TOTAL TIME DURATION 例如 在图像中 所选日期为 2015 年
  • MySql 5.7 ORDER BY 子句不在 GROUP BY 子句中并且包含非聚合列

    我试图在不禁用 my ini 中的 only full group by 的情况下弄清楚 这是我的查询 SELECT p title COUNT t qty AS total FROM payments t LEFT JOIN produc
  • 将庞大数据库从亚马逊RDS导出到本地mysql

    我在 Amazon RDS 上有一个 mysql 数据库 大约 600GB 数据 我需要将其移回本地专用服务器 但我不知道从哪里开始 每次我尝试初始化 sqldump 时它都会冻结 有没有办法将其移至 S3 甚至可能在开始下载之前将其分成更
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 通过触发器应用表的列权限

    现在 我有一个名为 Members 的表 其中包含内容 分为联系人数据 银行数据 现在 管理员应该能够创建 更新 删除用户 这些用户保存在另一个表中 该表只能访问管理员 用户应该获得自己的 mysql 用户帐户 管理员还应该能够设置权限 例
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • MySQL 转储未知选项“-no-beep”

    在旧服务器上我使用了mysql转储命令来备份 MySQL 数据库 在新服务器上 MySQL 版本为 5 6 相同的命令给出了错误 unknown option no beep 无论它插入什么 我也在互联网上搜索过 但找不到任何帮助 在 my

随机推荐

  • Unity3D之Animation中AnimationEvent的BUG?爬坑向

    写在前面 账号被盗 博客被封 直到今天才动手找回 没想到还挺顺利 刚好手头上碰到一个坑 记录一下 BUG 1 如图 我在动画的末尾添加了一个AnimationEvent 我希望达到的效果 if 动画拨到最后一帧时 情况一 通知我 这里输出一
  • python中alpha什么意思_如何在Python中设置像素的alpha值

    我正在尝试以某种方式编辑 image 以便将所有白色像素转换为透明像素 具有0 alpha值 基本上我想摆脱背景 我知道图像文件的im putpixel方法 但是根据我的实验 这不允许我设置alpha值 我尝试了以下方法 for x in
  • 计算机BIOS的简单设置

    BIOS是什么 BIOS全称是基本输入输出系统 Basic Input Output System 是由主板厂商固化到主板上的一个特殊的计算机程序 它会在计算机开机的时候会检测硬件 运行自检程序 然后开始查找操作系统并引导到操作系统 所以
  • open3d 点到点云之间的距离

    关键代码 dists pcd compute point cloud distance target chair pcd chair PointCloud import open3d as o3d import numpy as np if
  • Impala的分析函数(基于impala2.12)

    分析函数又称为开窗函数 是一种特殊的内置函数 分析函数不会仅限于对每个group by的分组产生一个结果 它操作的是一个窗口 window 输入的行是排序和分组的 可以通过over 语句使用灵活的条件 impala的分析函数是从impala
  • GIF动态图制作工具(免费),附教程

    GIF动态图制作工具 免费 这里推荐一款动态图制作工具 还可以视频剪辑等等功能非常强大且占内存较小 完全免费非常好用 软件 格式工厂 网上直接搜就行 下载链接在下方 动态图制作教程如下动态图 CSDN发动态图只允许5MB以下所以我选了限制大
  • Python编程之斐波那契数列

    问题描述 完成斐波拉契数列的输出 程序分析 斐波那契数列 Fibonacci sequence 又称黄金分割数列 指的是这样一个数列 0 1 1 2 3 5 8 13 21 34 在数学上 费波那契数列是以递归的方法来定义 F0 0 n 0
  • CloudCompare——采样滤波

    目录 一 随机采样 1 算法原理及代码实现 2 软件实现 3 结果展示 二 空间采样 1 算法原理 2 软件实现 3 结果展示 三 八叉树采样 1 1 算法原理及代码实现 2 软件实现 3 结果展示 四 八叉树采样 2 1 算法原理及代码实
  • 增删改查

    Table structure for user DROP TABLE IF EXISTS user CREATE TABLE user id int 11 NOT NULL AUTO INCREMENT userName varchar
  • PAT_A1134#Vertex Cover

    Source PAT A1134 Vertex Cover 25 分 Description A vertex cover of a graph is a set of vertices such that each edge of the
  • splitVector "errmsg" : "not authorized on test to execute command

    mongodb开启权限之后 splitVector 需要的权限 user test da db test 拥有管理元权限 都不能执行成功 gt db system users find id admin dba user dba db ad
  • flex布局,让2个高度不固定的元素占满屏幕

    例如有这样的一个容器 div class outer div class head div div class content div div outer 的高度是屏幕的高度head 的高度是不确定的 由内容撑高 如何通过纯css使得 co
  • 会议OA项目之我的会议

    目录 一 会议OA名词介绍 二 我的会议SQL语句编写 三 我的会议后台 四 前端 一 会议OA名词介绍 我的会议 当前登录账号 是 某会议 主持人 则查询出来 我的审批 当前登录账号 是 某会议 的指定审批人 并且会议状态是待审核 则查询
  • 视频通信中的码率控制算法

    码率控制技术RC Rate Control 是视频编码中一个非常重要的技术模块 不同的应用场景对视频编码的码率控制有不同的需求 离线编码通常采用可变码率 VBR 实时视频系统通常采用恒定码率 CBR 本篇技术干货将深度剖析视频编码中的码率控
  • Redis Hash查询-单个key存多个对象和多个key存整个对象的差异

    使用的是 NET CORE的StackExchange Redis客户端程序操作redis 以下是个人见解 单个key存多个对象 优点 获取多个数据或全部数据的时候比较方便 操作简单 获取全部 var list await redisCli
  • NetCDF(nc)读写与格式转换介绍

    本文介绍了NetCDF文件格式 并详细讲解了如何使用Python对NetCDF文件进行读写操作 进而介绍了NetCDF文件的地理参考 最后以两个数据为例讲解了怎么将NetCDF格式的数据转GeoTIFF格式的数据 nc文件转为 tif文件
  • 嵌入式Linux--menuconfig详解

    menuconfig 1 简介 menuconfig是一套图像化配置工具 由ncurses库提供软件支持 ncurses库提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面 menuconfig本身的软件只负责提供menuconf
  • docker容器域名映射

    为解决每次区块链连接地址变动时 都必须修改程序内或者程序内附带的连接IP地址 故实现本地hosts文件IP与域名的映射 实现方式 场景一 服务为传统方式启动 解决方法 在服务器本地的 etc hosts文件内添加IP和域名的映射 vim e
  • 将Qtcreator编译器、调试器等配置为MSVC2017/2019

    目录 1 前言 2 工具 原料 2 1 安装Windows下的软件开发调试器 3 配置Qtcreator 1 前言 安装Qt或Qtcreator时 一般选择MinGW 64 bit或MSVC编译器 对于MinGW 64 bit很简单 一般安
  • Mysql检查列是否存在并新增、修改、删除列

    很多时候只有自己遇到了问题才会着手去解决 这次刚好遇到了Mysql检查列是否存在的问题 顺便看到了网上其他大神也遇到过该问题就当作经验自己积累下来吧 在MYSQL中 新增 修改 删除列时不能进行IF EXISTS判断 IF语句只能出现在存储