达到表大小限制时,MYSQL 是不是会截断表?

Posted

技术标签:

【中文标题】达到表大小限制时,MYSQL 是不是会截断表?【英文标题】:Does MYSQL truncate a table when the tables size limit is reached?达到表大小限制时,MYSQL 是否会截断表? 【发布时间】:2011-05-03 18:51:05 【问题描述】:

我一直在翻阅 mysql 文档,试图确定我的脚本或 MYSQL 本身是否导致大表截断。我看到的基本行为:

从浏览器启动 php 脚本以从 MSSQL 表中选择行并立即将它们插入到本地 MySQL 数据库表中。 确定 MSSQL 中的行数后,我的脚本将选择分解为多个块以避免任何内存不足问题。 脚本然后截断本地表并开始通过迭代块来导入数据 直接跟踪 MySQL 中的数据,我看到表接近约 200,000 行,然后表突然被截断,计数重新开始 我认为我会看到一些关于表已满的错误,并且我认为如果达到表限制,MySQL 不会截断表。

如果达到表限制或设置检查以关闭此类行为,任何人都可以确认 MySQL 是否会自动截断表?

【问题讨论】:

【参考方案1】:

没有 MySQL 对表的大小没有硬性限制,但是有一些限制...

明确的表格大小 您可以使用

设置最大表大小
ALTER TABLE tbl_name MAX_ROWS=200000

您可以通过

查看表格大小的当前设置
SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

见:http://dev.mysql.com/doc/refman/5.0/en/full-table.html

注意MAX_ROWS 是:

您计划在表中存储的最大行数。这不是硬性限制,而是对存储引擎的提示,即表必须能够存储至少这么多行。

文件系统限制 MySQL 5.x 的默认表大小为 256TB,但如果您的文件系统不允许大于 4GB 的文件,这也可能是导致此行为的限制。

内存限制 如果您使用memory(堆)引擎,则您的表大小由max_heap_table_size 系统变量决定。

【讨论】:

谢谢!我怀疑这不是 MySQL,但在棺材上钉一个钉子可以更容易地在我的脚本中查明问题。【参考方案2】:

我不认为 MySQL 会截断您的数据,我使用过 500,000 行或更多行的表,完全没有问题。所以,我认为你最好注意你的 PHP 脚本,或者至少是 PHP 配置,PHP 可以处理的所有超时设置和脚本大小。

max_execution_time max_input_time memory_limit

希望对你有帮助。

【讨论】:

以上是关于达到表大小限制时,MYSQL 是不是会截断表?的主要内容,如果未能解决你的问题,请参考以下文章

Google Colab 错误:缓冲数据在达到输出大小限制后被截断

mysql 对插入超过表字段限制时的处理

请问一下mysql是否限制了单个表的容量,能改吗

存储过程是不是可以调用截断 veiw 表并将数据输入到 MySql 中的视图表中[关闭]

怎么修改mysql数据库临时表空间大小

MYSQL 清空表和截断表