2017-03-06 57 views
0

我試圖從與正在使用Handsontable的MySQL表中刪除列。如何使用列號從MySQL中的表中刪除列

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

我想利用MySQL表通過這個回調函數返回的列數(n)刪除列:當我從Handsontable刪除列,我可以使用afterRemoveCol()回調得到列的索引使用類似於:

ALTER TABLE tbl_Blah DROP COLUMN n; 

所以,如果我想從MySQL表中刪除列#3,我將如何使用列號?

回答

1

爲了增加RMathis回答,您還可以使用SET與PREPARE and EXECUTE

SQL Fiddle

的MySQL 5.6架構設置定義連詞的DROP串用做SQL內的一切:

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) |  | 
0

將它們(數據庫中的列映射到電子表格)命名爲數字/字母與您的電子表格完全對應。

然後你就可以使用常規的ALTER TABLE ... DROP COLUMN。

1

來自SQL的SQL可以使用information_schema.columns中的ordinal_position生成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 

列定義已被刪除從桌子上。

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) 
+0

工作! 「ordinal_position」是關鍵!我使用你的建議解決方案來簡單地查詢列名「WHERE ordinal_position = n」。然後我使用結果來創建使用列名稱的DROP語句。 謝謝。 – chromej