如何在名为partition

时间:2016-06-28 14:54:59

标签: mysql reserved-words

我有一个名为partition的列的MySQL表。由于它是一个保留关键字,我应该可以使用backticks在查询中使用它。它适用于SELECT,但不适用于ALTER TABLE

如果我尝试:

ALTER TABLE `table` DROP `partition`;

ALTER TABLE `table` CHANGE `partition` `othername` INT;

MySQL抱怨同样的错误:

Error code 1054: Unknown column 'partition' in 'partition function'

我通过My​​SQL Workbench或通过Java JDBC尝试使用终端'终端,我总是得到同样的错误。

任何建议摆脱该列(不丢失/重新创建整个表......)?

编辑: 你可以用这样的小表来测试它:

CREATE TABLE `testpart` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `partition` smallint(6) NOT NULL, UNIQUE KEY `id` (`id`,`partition`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY HASH(partition) PARTITIONS 16;

然后尝试

ALTER TABLE `testpart` DROP COLUMN `partition`;

2 个答案:

答案 0 :(得分:1)

第一次尝试几乎是正确的,但您必须说明要删除的内容 COLUMN 。试试这个删除它们。反引号也在起作用。

ALTER TABLE `table` DROP COLUMN `partition`;

这是Mariadb的手册页:https://mariadb.com/kb/en/mariadb/alter-table/

<强>样品

我必须在我的回答中添加一些信息:

  • 该表有PARTITION

  • 并且您要更改/删除的COLUMN是KEY因此

  • 您必须先删除PARTITION才能更改它们

  • COLUMN的名称是关键字,因此您必须始终使用反引号引用它

创建一个包含16个分区的表

MariaDB [yourschema]> CREATE TABLE testpart (
    ->   id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    ->   `PARTITION` SMALLINT(6) NOT NULL,
    ->   UNIQUE KEY id (id,`PARTITION`)
    -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    -> PARTITION BY HASH (`PARTITION`)
    -> PARTITIONS 16 ;
Query OK, 0 rows affected (0.12 sec)

现在删除分区

MariaDB [yourschema]> ALTER TABLE `testpart` REMOVE PARTITIONING;
Query OK, 0 rows affected (0.35 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除(或更改)COLUMN

MariaDB [yourschema]> ALTER TABLE `testpart` DROP COLUMN `PARTITION`;
Query OK, 0 rows affected (0.21 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [yourschema]> 

答案 1 :(得分:0)

分区列是否具有int值? 尝试改变这一点。