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

时间:2011-05-03 18:51:05

标签: php mysql

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

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

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

2 个答案:

答案 0 :(得分: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系统变量确定。

答案 1 :(得分:0)

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

  • 的max_execution_time
  • max_input_time设置
  • memory_limit的

我希望这可以帮到你。