当我尝试使用phpMyAdmin导入大型.sql
文件时,它不会报告语法错误。每次它只返回“1命令被成功执行”。然后我看着桌子,发现它是空的。
如果我手动编辑.sql
文件并将其与START TRANSACTION;
和COMMIT;
语句一起打包,它会按预期报告错误。
我担心某些地方可能出现了错误的配置。我实际使用的数据是保密的,但我能够使用以下测试数据重现该问题:
架构:
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`field1` int(11) NOT NULL,
`field2` int(11) NOT NULL,
`field3` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
no_error_message.sql
的内容:
INSERT INTO `test`(field1,field2,field3) VALUES
(1,2,3),
(1,2,2),
(1,2,3),
(1,2,2),
-- ... around 20,000 similar rows
(1,,3),
-- oops syntax error
(1,2,5);
只有在sql文件非常大的情况下才会发生这种情况。
使用phpMyAdmin中的导入功能导入数据。就像我说的那样,当我把它变成一个事务时,它会神奇地注意到语法错误。这只是一个错误(如果是这样,在哪个包中,它是在最新版本中发生的),还是还有其他的东西在这里?在数据库方面,我倾向于过于偏执。
我无法在Google搜索中找到任何有用的内容。
答案 0 :(得分:1)
我无法告诉你为什么它仅在“事务”下报告错误,但我建议您针对.sql文件运行某种验证脚本,以检查VALUE列表中是否有丢失或无效的条目把它喂给phpMyAdmin。此外,一切都在一个INSERT下,还是分成多个INSERT,每个语句有合理数量的VALUE集?您可能会看到它是否开始使用较小的数据组(例如,每次几百套)报告语法错误。