85

所以我阅读了其他帖子,但这个问题是独一无二的。所以这个 SQL 转储文件有这个作为最后一个条目。

INSERT INTO `wp_posts` VALUES(2781, 3, '2013-01-04 17:24:19', '2013-01-05 00:24:19'.

我正在尝试将此值插入表中...

INSERT INTO `wp_posts` VALUES(5, 5, '2005-04-11 09:54:35', '2005-04-11 17:54:35'

它给了我错误,“列数与第 1 行的值计数不匹配。” 所以我迷失了列和行在这里如何应用的概念。

不是2781,3指第 2781 行和第 3 列吗?并不5,5意味着第 5 行和第 5 列?

4

5 回答 5

96

该错误意味着您提供的数据不如表wp_posts包含的列多。现在数据库引擎不知道将您的数据放在哪些列中。

要克服这个问题,您必须提供要填充的列的名称。例子:

insert into wp_posts (column_name1, column_name2)
values (1, 3)

查找表定义并查看要填充的列。

并且insert意味着您正在插入一条新记录。您不是在修改现有的。为此使用update

于 2013-08-21T23:29:26.210 回答
34
  1. 您错过了两个值或列名之间的逗号
  2. 您放置了额外的值或额外的列名
于 2016-01-12T06:51:33.583 回答
20

您还应该查看新的触发器。

MySQL 没有在错误中显示表名,所以你真的陷入了困境。这是一个工作示例:

use test;
create table blah (id int primary key AUTO_INCREMENT, data varchar(100));
create table audit_blah (audit_id int primary key AUTO_INCREMENT, action enum('INSERT','UPDATE','DELETE'), id int, data varchar(100) null);
insert into audit_blah(action, id, data) values ('INSERT', 1, 'a');
select * from blah;
select * from audit_blah;
truncate table audit_blah;

delimiter //
/* I've commented out "id" below, so the insert fails with an ambiguous error: */
create trigger ai_blah after insert on blah for each row 
begin 
  insert into audit_blah (action, /*id,*/ data) values ('INSERT', /*NEW.id,*/ NEW.data);
end;//

/* This insert is valid, but you'll get an exception from the trigger: */
insert into blah (data) values ('data1');
于 2016-11-10T17:09:18.210 回答
10

如果您尝试插入多行而不用括号分隔 VALUES 部分中的行集,MySQL 还将报告“列计数与第 1 行的值计数不匹配”,如下所示:

INSERT INTO `receiving_table`
  (id,
  first_name,
  last_name)
VALUES 
  (1002,'Charles','Babbage'),
  (1003,'George', 'Boole'),
  (1001,'Donald','Chamberlin'),
  (1004,'Alan','Turing'),
  (1005,'My','Widenius');
于 2017-06-09T16:44:50.610 回答
9

您可以通过提供您正在影响的列名来解决该错误。

> INSERT INTO table_name (column1,column2,column3)
 `VALUES(50,'Jon Snow','Eye');`

请注意,分号只能在提供值的语句之后添加

于 2019-03-09T23:08:40.570 回答