我正在尝试运行一个创建表的大型脚本,然后将近15,000行插入其中。表创建得很好,然后在833 INSERT,我收到一个错误:
Error: Query was empty (1065)
这是我的833rd INSERT语句(失败的语句):
INSERT INTO CLASSCODE (CLASS_CODE, CLASS_CODE_NAME, RATE_GROUP, PROGRAM_NM, ST_CODE, EFF_DT, EXP_DT) VALUES (10255, "Funeral Directors - incl PL other than Crematory - 10255", 3, "Service", "AZ", 19980801, NULL);
我看不到此行之间的任何语法错误或差异,以及有效的错误。对于参考,这里是INSERT语句的一个例子,它可以正常工作:
INSERT INTO CLASSCODE (CLASS_CODE, CLASS_CODE_NAME, RATE_GROUP, PROGRAM_NM, ST_CODE, EFF_DT, EXP_DT) VALUES (10425, "Frame Shop - Picture/Posters - 10425", 2, "Retail", "AZ", 19980801, NULL);
让我感到困惑的部分是,如果我使用来自另一个SELECT语句的数据来填充新行,那么错误听起来会发生。但事实并非如此,因为我的INSERT语句都使用静态数据。
我的表定义如下:
CREATE TABLE CLASSCODE (
CLASS_CODE INTEGER NOT NULL,
CLASS_CODE_NAME VARCHAR(60) NOT NULL,
RATE_GROUP SMALLINT NOT NULL,
PROGRAM_NM VARCHAR(20) NOT NULL,
ST_CODE CHAR(2),
EFF_DT DATE,
EXP_DT DATE)
我在GUI MySQL查询浏览器中运行此脚本。
这可能与我尝试插入的行数有关吗?我需要定期提交吗?我有什么简单的东西可以忽略吗?
谢谢!
答案 0 :(得分:4)
在脚本文件中遇到这些问题的最常见方案是在某个地方有一个双分号:
INSERT INTO CLASSCODE
(CLASS_CODE, CLASS_CODE_NAME, RATE_GROUP, PROGRAM_NM, ST_CODE, EFF_DT, EXP_DT)
VALUES
(10255, "Funeral Directors - incl PL other than Crematory - 10255", 3, "Service", "AZ", 19980801, NULL)
;;
我会快速搜索一下脚本,看看833行附近是否有;;
。
答案 1 :(得分:3)
我建议在终端或SSH会话中从命令行运行sql。 gui界面可能会干扰或限制您运行大量插入的能力。
答案 2 :(得分:1)
由于其他插入工作正常,并且它们的结构似乎没有差别,我首先想到的是你在插入号码833处耗尽了一些资源。
如果在每次插入后执行提交(事务缓冲区可能空间不足)会发生什么?那会有用吗?实际上,更好的测试是在交易号800处进行一次提交。如果你超过833,那那就是你的问题。
如果是这样,只需修改你的脚本(或创建你自动生成的脚本id的脚本)来提交每100个左右的插入(在每次插入后提交可能会使它变得难以忍受地慢)。
答案 3 :(得分:1)
如果你担心你的实际查询语法,它似乎很好。我创建了你的表并运行插入,它工作。当你说你正在运行一个脚本时,你是否只有一个充满原始SQL的文件?在人们使用JDBC类型的东西并且他们的循环逻辑混乱之前我遇到“空查询”类型错误的时候。
我认为我们可以肯定地说,这不是您粘贴的特定插入语句,它必须是服务器相关的内容或脚本中该查询的语法。除非您重新配置了某些内容,否则这些行应该自动提交。你可以尝试运行“show variables;”从mysql命令行并在此处附加。然后我们可以看看你的设置,看看是否有什么看起来很奇怪。
您是否尝试过重新订购文件中的部分插页?这至少会告诉我们它是否在特定查询或文件中的特定位置失败。尝试重新排序您的插入,只是为了看它是否仍然失败大约833 in或如果它在另一个地方失败。如果它落在同一个地方,它听起来像一个记忆或缓冲相关的东西。如果它在移动时改变了位置,我会说你有一个像@zombat那样在某个地方铺设的流浪角色(或者一个......)。
希望有所帮助。让我们知道你能做什么。
答案 4 :(得分:0)
我今天遇到了同样的错误。显然,当我使用PDO:MySql的预准备语句时,该表在查询时具有空数据。
我必须纠正表中所有丢失的数据。