gpt4 book ai didi

mysql - 有条件地添加/删除列 MySQL

转载 作者:行者123 更新时间:2023-11-29 09:29:32 25 4
gpt4 key购买 nike

我正在尝试将一列插入表中(如果该列尚不存在)。任何类似 DROP COLUMN IF EXISTS 的东西都不起作用(删除和添加列都不起作用),显然是因为我的 MySQL 版本不支持此类 if 条件。我的问题是,是否可以根据 CASE 语句将列插入到表中?

我已经弄清楚如何确定列是否存在,但我正在努力根据此条件插入列。

我希望工作的case语句看起来像这样:

    CASE WHEN    (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='PSIP-1.Standardproject_V2.5_notvalid'
AND TABLE_NAME='PS_Relevant Rail Stations$Loc'
AND COLUMN_NAME='triade')
IS NULL THEN
ALTER TABLE PS_Relevant Rail Stations$Loc
ADD COLUMN triade;

我也不确定该 CASE 语句 放在哪里,因为该代码本身无法运行。我是否需要从 UPDATE PS_Relevant Rail Stations$Loc 开始,然后继续 CASE

最佳答案

您可以使用存储过程来实现此功能,该存储过程将数据库名称、表名称、列名称和列定义作为输入,如果指定表中不存在列名称,则创建一个动态 SQL 语句来创建它。例如:

DELIMITER //

DROP PROCEDURE IF EXISTS add_column_if_not_exists //

CREATE PROCEDURE add_column_if_not_exists(IN dbname VARCHAR(50),
IN tblname VARCHAR(50),
IN colname VARCHAR(50),
IN coltype VARCHAR(50))
BEGIN
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=dbname
AND TABLE_NAME=tblname
AND COLUMN_NAME=colname) THEN
SET @sql = CONCAT('ALTER TABLE `', dbname, '`.`', tblname, '` ADD COLUMN `', colname, '` ', coltype);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END //

DELIMITER ;

然后您可以像这样调用此过程(根据需要修改列定义)

CALL add_column_if_not_exists('PSIP-1.Standardproject_V2.5_notvalid',
'PS_Relevant Rail Stations$Loc',
'triade',
'INT NOT NULL DEFAULT 0')

请注意,如果您只有特定情况,例如它始终是同一个表中的同一列,您可以在查询中对这些值进行硬编码并删除相应的输入参数。

关于mysql - 有条件地添加/删除列 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58992870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com