如何使用列号从 MySQL 中的 table 中删除列

How to DROP a column from a table in MySQL using a column number

我正在尝试从与 Handsontable 一起使用的 MySQL table 中删除一列。当我从 Handsontable 中删除一列时,我可以使用 afterRemoveCol() 回调获取该列的索引:

afterRemoveCol: function (index, amount) {
    alert(index +'  amount: '+amount);
}

我想使用此回调函数从 MySQL table 中返回的列编号 (n) 删除列,使用类似:

ALTER TABLE tbl_Blah DROP COLUMN n;

因此,如果我想从 MySQL table 中删除第 3 列,我该如何仅使用列号来完成此操作?

使用与您的电子表格完全一致的 numbers/letters 命名它们(数据库中反映电子表格的列)。

然后您就可以使用常规的 ALTER TABLE ... DROP COLUMN。

SQL from SQL 可以使用 ordinal_position from information_schema.columns.

生成 drop 语句
mysql test> create table test.tab (col1 char(1), col2 char(1), col3 char(1), col4 char(1), col5 char(1));
Query OK, 0 rows affected (0.01 sec)

mysql test> desc test.tab;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| col1  | char(1) | YES  |     | NULL    |       |
| col2  | char(1) | YES  |     | NULL    |       |
| col3  | char(1) | YES  |     | NULL    |       |
| col4  | char(1) | YES  |     | NULL    |       |
| col5  | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
5 rows in set (0.00 sec)

此查询正在生成删除第三列的语句...

mysql test> select concat('alter table ',table_schema,'.',table_name,' drop column ',column_name,';') as query1 from information_schema.columns where  table_schema='test' and table_name='tab' and ordinal_position=3;
+----------------------------------------+
| query1                                 |
+----------------------------------------+
| alter table test.tab drop column col3; |
+----------------------------------------+
1 row in set (0.00 sec)

现在 运行 计划的命令...

mysql test> alter table test.tab drop column col3;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

列定义已从 table 中删除。

mysql test> desc test.tab;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| col1  | char(1) | YES  |     | NULL    |       |
| col2  | char(1) | YES  |     | NULL    |       |
| col4  | char(1) | YES  |     | NULL    |       |
| col5  | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
4 rows in set (0.01 sec)

要添加到 RMathis 答案,您可以在 SQL 中完成所有操作,方法是还使用 SET 定义与 PREPARE and EXECUTE

结合的 DROP 字符串

SQL Fiddle

MySQL 5.6 架构设置:

CREATE TABLE Table1
    (`col1` varchar(1), 
     `col2` varchar(1), 
     `col3` varchar(1), 
     `col4` varchar(1), 
     `col5` varchar(1))
;

set @col = (select column_name 
            from information_schema.columns 
            where table_name='table1' and ordinal_position=3);

SET @s = CONCAT("alter table table1 drop column ", @col);

PREPARE stmt FROM @s;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

查询 1:

desc table1

Results:

| COLUMN_NAME | COLUMN_TYPE | IS_NULLABLE | COLUMN_KEY | COLUMN_DEFAULT | EXTRA |
|-------------|-------------|-------------|------------|----------------|-------|
|        col1 |  varchar(1) |         YES |            |         (null) |       |
|        col2 |  varchar(1) |         YES |            |         (null) |       |
|        col4 |  varchar(1) |         YES |            |         (null) |       |
|        col5 |  varchar(1) |         YES |            |         (null) |       |