如何在名为分区的列上使用 MySQL 中的 ALTER TABLE
How to use ALTER TABLE in MySQL on a column named partition
我有一个 MySQL table,其中有一个名为分区的列。因为它是保留关键字,所以我应该可以使用 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'
我在 'terminal' 中尝试过,通过 MySQL Workbench 或通过 Java JDBC
,我总是得到同样的错误。
关于删除该列的任何建议(不丢失/重新创建整个 table ...)?
编辑:
你可以用一个小的 table 来测试它:
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`;
第一次尝试几乎正确,但您必须说明要删除什么 COLUMN。试试这个删除它们。反引号也有效。
ALTER TABLE `table` DROP COLUMN `partition`;
这是 Mariadb 的手册页:https://mariadb.com/kb/en/mariadb/alter-table/
样本
我必须在我的回答中添加一些信息:
table 有分区
并且您要更改/删除的列是关键,因此
您必须先删除分区才能更改它们
COLUMN 的名称是 KEYWORD,因此您必须始终用反引号将其引用
创建具有 16 个分区的 table
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]>
分区列是否有整型值?
尝试相应地改变它。
我有一个 MySQL table,其中有一个名为分区的列。因为它是保留关键字,所以我应该可以使用 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'
我在 'terminal' 中尝试过,通过 MySQL Workbench 或通过 Java JDBC
,我总是得到同样的错误。
关于删除该列的任何建议(不丢失/重新创建整个 table ...)?
编辑: 你可以用一个小的 table 来测试它:
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`;
第一次尝试几乎正确,但您必须说明要删除什么 COLUMN。试试这个删除它们。反引号也有效。
ALTER TABLE `table` DROP COLUMN `partition`;
这是 Mariadb 的手册页:https://mariadb.com/kb/en/mariadb/alter-table/
样本
我必须在我的回答中添加一些信息:
table 有分区
并且您要更改/删除的列是关键,因此
您必须先删除分区才能更改它们
COLUMN 的名称是 KEYWORD,因此您必须始终用反引号将其引用
创建具有 16 个分区的 table
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]>
分区列是否有整型值? 尝试相应地改变它。