【问题标题】:How to delete a column from a table in MySQL如何从 MySQL 中的表中删除列
【发布时间】:2012-12-07 18:08:47
【问题描述】:

鉴于使用以下方法创建的表:

CREATE TABLE tbl_Country
(
  CountryId INT NOT NULL AUTO_INCREMENT,
  IsDeleted bit,
  PRIMARY KEY (CountryId) 
)

如何删除IsDeleted 列?

【问题讨论】:

    标签: mysql ddl alter-table


    【解决方案1】:
    ALTER TABLE tbl_Country DROP COLUMN IsDeleted;
    

    Here's 一个工作示例。

    注意COLUMN 关键字是可选的,因为MySQL 只接受DROP IsDeleted。此外,要删除多列,您必须用逗号分隔它们,并为每一列添加DROP

    ALTER TABLE tbl_Country
      DROP COLUMN IsDeleted,
      DROP COLUMN CountryName;
    

    这允许您在一个语句中对同一个表上的多个列进行DROPADDALTER。来自MySQL reference manual

    您可以在单个ALTER TABLE 语句中发出多个ADDALTERDROPCHANGE 子句,以逗号分隔。这是标准 SQL 的 MySQL 扩展,每个 ALTER TABLE 语句只允许每个子句中的一个。

    【讨论】:

      【解决方案2】:

      使用ALTER TABLEDROP COLUMN 从表中删除列,使用CHANGEMODIFY 更改列。

      ALTER TABLE tbl_Country DROP COLUMN IsDeleted;
      ALTER TABLE tbl_Country MODIFY IsDeleted tinyint(1) NOT NULL;
      ALTER TABLE tbl_Country CHANGE IsDeleted IsDeleted tinyint(1) NOT NULL;
      

      【讨论】:

      • 您可以使用更改或修改列来执行相同的操作。检查链接,它会给你使用 ALTER TABLE 更新列的想法
      【解决方案3】:

      删除单个列:

      ALTER TABLE `table1` DROP `column1`;
      

      删除多列:

      ALTER TABLE `table1`
      DROP `column1`,
      DROP `column2`,
      DROP `column3`;
      

      【讨论】:

      • 它也适用于带有reserved words的列,例如order
      【解决方案4】:

      你可以使用

      alter table <tblname> drop column <colname>
      

      【讨论】:

        【解决方案5】:
        ALTER TABLE `tablename` DROP `columnname`;
        

        或者,

        ALTER TABLE `tablename` DROP COLUMN `columnname`;
        

        【讨论】:

          【解决方案6】:

          如果您运行的是 MySQL 5.6 及更高版本,您可以在线执行此操作,允许其他会话在执行操作时读取和写入您的表:

          ALTER TABLE tbl_Country DROP COLUMN IsDeleted, ALGORITHM=INPLACE, LOCK=NONE;
          

          【讨论】:

            【解决方案7】:

            使用ALTER:

            ALTER TABLE `tbl_Country` DROP COLUMN `column_name`;
            

            【讨论】:

              【解决方案8】:
              ALTER TABLE tbl_Country DROP columnName;
              

              【讨论】:

                【解决方案9】:

                值得一提的是MySQL 8.0.23及以上版本支持Invisible Columns

                CREATE TABLE tbl_Country(
                  CountryId INT NOT NULL AUTO_INCREMENT,
                  IsDeleted bit,
                  PRIMARY KEY (CountryId) 
                );
                
                INSERT INTO tbl_Country VALUES (1, 1), (2,0);
                
                ALTER TABLE tbl_Country ALTER COLUMN IsDeleted SET INVISIBLE;
                
                SELECT * FROM tbl_Country;
                CountryId
                1
                2
                
                ALTER TABLE tbl_Country DROP COLUMN IsDeleted;
                

                db<>fiddle demo

                在需要暂时“隐藏”一列才能安全删除它的情况下(例如重新处理相应的应用程序/报告等),它可能很有用。

                【讨论】:

                  猜你喜欢
                  • 2012-10-06
                  • 2017-07-26
                  • 2017-10-20
                  • 2015-08-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-12-26
                  • 1970-01-01
                  相关资源
                  最近更新 更多