当前位置: 首页 > 面试题库 >

MySQL:ALTER TABLE如果列不存在

国斌斌
2023-03-14
问题内容

我有以下代码:

ALTER TABLE `settings`
ADD COLUMN `multi_user` TINYINT(1) NOT NULL DEFAULT 1

而且我只想在此列不存在的情况下更改此表。

我正在尝试许多不同的方法,但是没有任何效果:

ALTER TABLE `settings`
ADD COLUMN IF NOT EXISTS `multi_user` TINYINT(1) NOT NULL DEFAULT 1

附带程序:

DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
    DECLARE _count INT;
    SET _count = (  SELECT COUNT(*) 
                    FROM INFORMATION_SCHEMA.COLUMNS
                    WHERE   TABLE_NAME = 'settings' AND 
                            COLUMN_NAME = 'multi_user');
    IF _count = 0 THEN
        ALTER TABLE `settings` ADD COLUMN `multi_user` TINYINT(1) NOT NULL DEFAULT 1
    END IF;
END $$
DELIMITER ;

我在END IF中出错,然后在END中又在1中出错

我怎样才能使它尽可能简单?


问题答案:

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

IF NOT EXISTS( SELECT NULL
            FROM INFORMATION_SCHEMA.COLUMNS
           WHERE table_name = 'tablename'
             AND table_schema = 'db_name'
             AND column_name = 'columnname')  THEN

  ALTER TABLE `TableName` ADD `ColumnName` int(1) NOT NULL default '0';

END IF;


 类似资料:
  • 问题内容: 我看了很多例子。但是此查询不起作用,出现以下错误: 错误1064(42000):您的SQL语法有错误;在第1行的’IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =’)附近,查看与您的MySQL服务器版本相对应的手册以使用正确的语法。 问题答案: 您可以为查询创建一个过程,

  • 我尝试使用检查序列是否存在于Postgres(plpgsql)中的代码。 如果序列不存在,则创建序列。运行此代码两次会导致异常: 序列...已经存在了。 如何只在序列不存在的情况下创建序列? 如果序列不存在,就不会写入消息,也不会发生错误,所以我不能在这个问题的另一个答案中使用存储过程,因为如果序列存在,它每次都会将消息写入日志文件。

  • 问题很简单。如何将列添加到表中,但仅当列不存在时?我在这里只找到了如何检查列是否存在的解决方案。

  • 问题内容: 问题很简单。如何将列添加x到表中y,但仅当x列不存在时才添加?我在这里只找到解决方案,如何检查列是否存在。 问题答案: 是使用“ DO”语句的简短版本: 您不能将它们作为参数传递,您需要在客户端的字符串中进行变量替换,但这是一个自包含的查询,如果该列已经存在,则仅发出一条消息,如果不存在则添加一条消息,并且会因其他错误(例如无效的数据类型)而继续失败。 如果这些方法是来自外部来源的随机

  • 问题内容: 如果两个值都不存在,如何推入数组?这是我的数组: 如果我尝试使用或再次将其推入数组,我什么都不希望发生…但是如果这两个都不存在,那么我希望它 我怎样才能做到这一点? 问题答案: 您可以使用自定义方法扩展Array原型:

  • 问题内容: 我的研究和实验还没有得到答案,所以我希望能有所帮助。 我正在修改一个应用程序的安装文件,该应用程序在以前的版本中没有我想立即添加的列。我不想手动添加列,而是要在安装文件中并且仅在表中不存在新列的情况下才添加。 该表如下创建: 如果我在create table语句下面添加以下内容,那么我不确定如果该列已经存在(可能已填充)会发生什么情况: 因此,我尝试了在某处找到的以下内容。这似乎不起作