stevenjin 2024-04-26 22:59 采纳率: 97.6%
浏览 5

mysql判断字段不存在则添加

由于ADD COLUMN IF NOT EXISTS这个语法是PostgreSQL中的特性,并不是MySQL的标准语法,于是用下面的方法添加列。
现在要对TABLE_NAME及COLUMN_NAME作为参数传递,求修改后的写法。


DELIMITER //
CREATE PROCEDURE AddMobileColumn()
BEGIN
    DECLARE column_exists INT;
    
    SET @query = CONCAT('SELECT COUNT(*) INTO @column_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''Student'' AND COLUMN_NAME = ''mobile''');
    PREPARE stmt FROM @query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    
    IF @column_exists = 0 THEN
        ALTER TABLE Student ADD COLUMN mobile VARCHAR(50) DEFAULT NULL;
    END IF;
END;//
DELIMITER ;
 
CALL AddMobileColumn();
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-26 22:59
    关注

    引自免费微信小程序:皆我百晓生

    在MySQL中,你可以创建一个存储过程来实现根据参数动态添加列的功能。这里是一个修改过的版本,它接受TABLE_NAMECOLUMN_NAME作为输入参数:

    DELIMITER //
    CREATE PROCEDURE AddColumnIfNotExists(IN table_name VARCHAR(64), IN column_name VARCHAR(64))
    BEGIN
        DECLARE column_exists INT;
        
        SET @query = CONCAT('SELECT COUNT(*) INTO @column_exists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''', table_name, ''' AND COLUMN_NAME = ''', column_name, '''');
        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        
        IF @column_exists = 0 THEN
            SET @alter_table_query = CONCAT('ALTER TABLE ', table_name, ' ADD COLUMN ', column_name, ' VARCHAR(50) DEFAULT NULL');
            PREPARE alter_stmt FROM @alter_table_query;
            EXECUTE alter_stmt;
            DEALLOCATE PREPARE alter_stmt;
        END IF;
    END;//
    DELIMITER ;
    
    -- 调用存储过程
    CALL AddColumnIfNotExists('Student', 'mobile');
    

    在这个示例中,我们定义了一个名为AddColumnIfNotExists的存储过程,它接受两个参数:table_namecolumn_name。然后,我们使用这些参数构建SQL查询,检查指定表中是否存在特定列。如果不存在,则执行ALTER TABLE语句来添加新列。通过这种方式,你可以灵活地为不同的表和列调用此存储过程。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月26日

悬赏问题

  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)