mysql检查数据库是否存在某列,若不存在则添加
2023-09-11 14:16:59 时间
mysql检查列是否存在自动添加
一、准备条件
1.mysql数据库正常运行,服务正常启动。
2.已知想添加的数据库、表和字段。
3.了解存储过程的基本用法。
4.举例说明,我用的数据库名为test、表名为persons、其中有一个字段为Id_A。
5.问题:现在想知道这个表中是否有字段Id_B,如果没有请添加。
二、编写存储过程
DROP PROCEDURE IF EXISTS p7; --防止数据库中有这个存储过程,先删掉
CREATE PROCEDURE p7()
BEGIN
DECLARE nRetRowCount int;
SELECT count(COLUMN_NAME) INTO nRetRowCount
FROM information_schema.columns
WHERE table_name = 'persons'
AND column_name = 'Id_B';
IF nRetRowCount = 0 THEN --如果没有记录
ALTER TABLE persons ADD Id_B int(4);
END IF;
END
DROP PROCEDURE IF EXISTS AddColumnsByIsNotExist;
CREATE PROCEDURE AddColumnsByIsNotExist (IN paramDBName VARCHAR(32), IN paramTableName VARCHAR(32),IN paramColumnName VARCHAR(32),IN paramColumnType VARCHAR(16), IN paramDefaultVal VARCHAR(16))
BEGIN
DECLARE nRetRowCount int;
SELECT count(COLUMN_NAME) INTO nRetRowCount
FROM information_schema.columns
WHERE UPPER(TABLE_SCHEMA) = UPPER(paramDBName)
AND UPPER(TABLE_NAME) = UPPER(paramTableName)
AND UPPER(COLUMN_NAME) = UPPER(paramColumnName);
IF nRetRowCount = 0 THEN
SET @prepareStatement = CONCAT("ALTER TABLE ", paramTableName, " ADD COLUMN ",paramColumnName ," ", paramColumnType, " DEFAULT ", paramDefaultVal, " ");
PREPARE stmt FROM @prepareStatement;
EXECUTE stmt ;
DEALLOCATE PREPARE stmt;
END IF;
END
三、执行存储过程
1.建议:查询资料说可以是有exec或call,而我这只有call好用,是不是我的版本问题,欢迎大家给出解答和建议。
2.方法:执行方法在命令行中输入call p7();即可,也可以在其他存储过程中调用这个存储过程,调用方法一样call p7();建存储过程与上面代码类似。
相关文章
- Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
- 【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysql客户端
- PDO连接mysql和pgsql数据库
- 【MySQL】批量删除mysql中数据库中的表
- 【Mysql安装】Mac下安装mysql
- MySQL选择数据库use与mysql_select_db使用详解
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- 【MYSQL数据库开发之一】MAC下配置安装数据库-MYSQL
- MySQL 数据库 [Err] 1093 - You can't specify target table 'd_alarm' for update in FROM clause
- Navicat Premium使用mysql数据库
- 解决远程登录mysql数据库报1130错误
- Mysql一个非常有用的内置函数今天碰到要把MySQL数据库中的varchar转换成date类型进
- 数据库内核月报 - 2015 / 06-MySQL · 答疑解惑 · binlog event 中的 error code
- Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
- Atitit postgresql data type 数据类型与mysql对应表 数据库常用数据类型 PostgreMysql 整数intgreterInt 小数numericFL
- Win10_MySQL环境搭建以及Navicat的使用全解
- 阿里内部mysql规范40条
- 〖Python 数据库开发实战 - MySQL篇㉟〗- 综合案例 - 数据库ER图设计、新闻类型表与用户角色表的创建
- ❤️ 万字Python MySQL从入门到精通详细教程❤️ 再也不用担心学不会数据库了❤️
- python使用插入带有%的字符串到mysql数据库
- 详解MySQL information_schema数据库常用的表信息以及各表对应的字段信息;以及如何登录mysql和创建视图
- 一脸懵逼学习Hive的元数据库Mysql方式安装配置
- mysql 详解02
- 108.第十九章 MySQL数据库 -- MySQL高可用 Galera Cluster(十八)
- 102.第十九章 MySQL数据库 -- MySQL的备份和恢复(十二)
- MySQL 配置, 避坑 sqlyog连接mysql错误码2058
- 云原生之使用Docker部署Mysql数据库
- 性能测试之mysql数据库如何调优?