【问题标题】:Mysql alter table error messageMysql alter table 报错信息
【发布时间】:2015-09-09 21:13:21
【问题描述】:

我正在尝试更改 MySQL 表以将列添加到现有列的末尾。但由于某些原因,MySQL 不喜欢我正在运行的查询。

下面是我的查询。

alter table hdds add 
hdd1 VARCHAR(100), 
hdd2 VARCHAR(100), 
hdd3 VARCHAR(100), 
hdd4 VARCHAR(100), 
hdd5 VARCHAR(50), 
hdd6 VARCHAR(100), 
hdd6 VARCHAR(100), 
hdd7 VARCHAR(100), 
hdd8 VARCHAR(100), 
hdd9 VARCHAR(100), 
hdd10 VARCHAR(100), 
hdd11 VARCHAR(100), 
hdd12 VARCHAR(100), 
hdd13 VARCHAR(100), 
hdd14 VARCHAR(100), 
hdd15 VARCHAR(100), 
hdd16 VARCHAR(100), 
hdd17 VARCHAR(100), 
hdd18 VARCHAR(100), 
hdd19 VARCHAR(100),
after comments;

我收到以下错误消息。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'hdd2 VARCHAR(100), 
    hdd3 VARCHAR(100), 
    hdd4 VARCHAR(100), 
    hdd5 ' at line 3 

不知道哪里出错了。

【问题讨论】:

    标签: mysql alter


    【解决方案1】:

    像魅力一样工作:

    create table t111
    (   id int auto_increment primary key,
        comments varchar(1000) not null
    );
    
    alter table t111
    add column hdd19 VARCHAR(100) after comments, 
    add column hdd18 VARCHAR(100) after comments, 
    add column hdd17 VARCHAR(100) after comments, 
    add column hdd16 VARCHAR(100) after comments, 
    add column hdd15 VARCHAR(50) after comments, 
    add column hdd14 VARCHAR(100) after comments, 
    add column hdd13 VARCHAR(100) after comments, 
    add column hdd12 VARCHAR(100) after comments, 
    add column hdd11 VARCHAR(100) after comments, 
    add column hdd10 VARCHAR(100) after comments, 
    add column hdd9 VARCHAR(100) after comments, 
    add column hdd8 VARCHAR(100) after comments, 
    add column hdd7 VARCHAR(100) after comments, 
    add column hdd6 VARCHAR(100) after comments, 
    add column hdd5 VARCHAR(100) after comments, 
    add column hdd4 VARCHAR(100) after comments, 
    add column hdd3 VARCHAR(100) after comments, 
    add column hdd2 VARCHAR(100) after comments, 
    add column hdd1 VARCHAR(100) after comments;
    
    describe t111;
    

    另外你有一个错字,尝试添加 hdd6 两次。

    编辑:

    我将列的顺序从 19 反转为 1,所以它们都在 comments 冒泡后排成一列(如 describe t111; 所示)

    在我看来,comments 从 1 到 19 之后,您有 2 种选择可以直观地排列顺序。

    1.你可以按照我的方式来做,在 cmets 之后先 19,然后在 cmets 之后 18(向下推 19),然后在 cmets 向下推 18 和 19 之后 17 ... cmets 向下推 1 2 日至 19 日。

    2. 您可以从 1 到 19 进行,并且必须在“cmets 部分”中单独修改 after comments 块,它看起来像这样: 创建表 t111 ( id int auto_increment 主键, cmets varchar(1000) 不为空 );

    alter table t11
    add column hdd1 VARCHAR(100) after comments, 
    add column hdd2 VARCHAR(100) after hdd1, 
    add column hdd3 VARCHAR(100) after hdd2,
    ...
    add column hdd19 VARCHAR(100) after hdd18;
    

    我选择了1.,也许不是最好和最快的,但它满足了我对泡沫的好奇心。

    所有这一切都取决于任何人至少关心他们的外观,但在你的情况下它可能应该,因为你有这么多而且容易出错。

    【讨论】:

    • 你应该解释为什么你在你的声明中颠倒了列的顺序。
    • 请添加更多详细信息——解释为什么需要颠倒顺序以便正确排列。我不是在批评,只是想帮助您改进答案。
    • 因此,在上述情况下,没有必要(选项 2)。我选择了选项 1。这似乎是目前让我感兴趣的一种方式
    【解决方案2】:

    不,您不能像这样在单个 ALTER 语句中添加多个列。这是错误的,因为它与 CREATE 声明不同,因此您收到的错误。您必须将其单独设置为 ALTER 声明,如

    alter table hdds add hdd1 VARCHAR(100) after comments;
    alter table hdds add hdd2 VARCHAR(100) after comments;
    

    【讨论】:

    • 您可以一次添加多个列,但您需要为每个列重复单词add
    • @Barmar,不确定 Drew 显示的语法。很高兴知道,但本质上我的意思是用单独的 ADD 语法为每一列说单独的 ALTER 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2015-02-14
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多