添加mysql中不存在的列

9nvpjoqh  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(383)

这个问题在这里已经有答案了

如果mysql表不存在,则将列添加到该表(16个答案)
两年前关门了。
当我在mysql5.7上运行这个程序时,我总是会遇到一个错误。我基本上只想添加一个列,如果这个列不存在的话

DROP PROCEDURE IF EXISTS ALIASCOLUMN;
DELIMITER //
CREATE PROCEDURE ALIASCOLUMN()
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
ALTER TABLE 'human_api_procedure' ADD COLUMN 'alias' varchar(255);
END //
DELIMITER;
CALL ALIASCOLUMN();
DROP PROCEDURE ALIASCOLUMN;
8ehkhllq

8ehkhllq1#

过程中的ddl语句必须作为动态sql执行(我想那是真的,我需要检查文件来证实。)
此外,标识符(表名、列名)不应该用单引号括起来。单引号是字符串文字的分隔符。
我希望此语句失败并出现语法错误:

ALTER TABLE 'human_api_procedure' ADD COLUMN 'alias' varchar(255)

这个

ALTER TABLE  human_api_procedure  ADD COLUMN  alias  varchar(255)
            ^                   ^            ^     ^

还是这个

ALTER TABLE `human_api_procedure` ADD COLUMN `alias` varchar(255)
            ^                   ^            ^     ^

将是有效的语法。如果在sql\u模式中包含ansi\u引号,我们还可以在标识符周围使用双引号。
执行命令 ALTER TABLE 在mysql存储程序的上下文中,我们可以这样做:

DELIMITER $$

CREATE PROCEDURE aliascolumn()
BEGIN

  SET @sql = 'ALTER TABLE human_api_procedure ADD COLUMN alias varchar(255)';
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

END$$ 

DELIMITER ;

mysql允许例程包含ddl语句,比如create和drop。
https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html
上面演示的模式,使用prepare/execute/deallocate将允许执行for动态sql,而不仅仅是静态sql文本。

yyyllmsg

yyyllmsg2#

在存储过程中使用以下命令:

IF NOT EXISTS( SELECT *
             FROM 'tablename'
             WHERE table_name = 'tablename'
             AND table_schema = 'db_name'
             AND column_name = 'columnname')  THEN

  ALTER TABLE `human_api_procedure` ADD `alias` varchar(255) ;

END IF;

检查此链接。它可能会帮助你。:)

相关问题