1

我有一个这样定义的表:

CREATE TABLE `_debug_log` (
  ...
) ENGINE=MyISAM AUTO_INCREMENT=896692 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci MAX_ROWS=100000 ROW_FORMAT=COMPRESSED;

我想删除 MAX_ROWS 选项,因为此表不需要它,但我确实需要保留现有数据。有没有办法通过 ALTER 语句取消设置此表选项,或者我需要导出数据、重建表然后重新导入数据?我检查了 MAX_ROWS 上的 MySQL 文档,但它只说它需要一个正整数值,并没有说明默认值是什么或值 0 可能会做什么。

4

2 回答 2

0

对于它的价值:

CREATE TABLE `_debug_log` (
id int unsigned primary key auto_increment
) ENGINE=MyISAM AUTO_INCREMENT=896692 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci MAX_ROWS=100000 ROW_FORMAT=COMPRESSED;

SHOW CREATE TABLE _debug_log;

给出:

CREATE TABLE `_debug_log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=896692 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci MAX_ROWS=100000 ROW_FORMAT=COMPRESSED

然后:

alter table _debug_log max_rows = 0;

SHOW CREATE TABLE _debug_log;

给出:

CREATE TABLE `_debug_log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=896692 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPRESSED

ALTER我尝试在运行之前和之后插入一些数据ALTER,它似乎没有受到影响。

此外,如果您使用相同的选项创建同一个表但排除该MAX_ROWS选项,请插入相同的数据,然后查看数据中information_schema.tables的结果数据几乎相同(除了明显的差异):

于 2012-01-06T15:38:07.850 回答
0

如果您不想使用该选项,只需将其设置为 0:

ALTER TABLE `_debug_log` MAX_ROWS = 0;
于 2012-01-06T16:18:28.890 回答