【问题标题】:Column count doesn't match value count at row 1列计数与第 1 行的值计数不匹配
【发布时间】:2013-08-24 12:33:13
【问题描述】:

所以我阅读了其他帖子,但这个问题是独一无二的。所以这个 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 列吗?

【问题讨论】:

  • wp_posts 中声明了多少列? INSERT 中有多少个表达式(您只显示了 4 个,但不完整)? 2781,3 只是INSERT 中的前两个表达式,而不是行号和列号。

标签: mysql wordpress sql-insert


【解决方案1】:

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

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

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

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

insert 表示您正在插入新的记录。您不是在修改现有的。为此使用update

【讨论】:

    【解决方案2】:
    1. 您错过了两个值或列名之间的逗号
    2. 您添加了额外的值或额外的列名

    【讨论】:

      【解决方案3】:

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

      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');
      

      【讨论】:

      • 我完全忘记了我在添加一个新列的表上的插入后、更新后和删除前触发器。尝试了所有方法,但在重新生成触发器之前,表上的插入/删除记录不起作用。我非常感谢你的回答。
      • @rahimv 真的很高兴这对您有所帮助!这是一个相当具有误导性的错误消息,在我意识到出了什么问题之前让我感到相当震惊!
      • @inanutshellus 非常感谢!!!!!!!我忘记了数据库中的触发器!!!!!!我浪费了一整天寻找错误!我不得不恢复到我之前的 github 提交,然后开始进行增量更改以跟踪问题,但仍然无法解决!!!非常感谢@inanutshellus!!!!
      • 想象一下,如果有人 else 扣动扳机,会让人头疼!为什么不将触发器名称放在错误中!?很高兴它有帮助,@DreadPirateAlex 我有多达 14 位满意的客户! :^)
      【解决方案4】:

      如果您尝试插入多行而不用括号分隔 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');
      

      【讨论】:

      • 如果一个人忘记了元组的两个值之间的逗号( , ),也会发生此错误。这是一个愚蠢的错误,通常很烦人
      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-01-10
        • 2014-01-17
        • 2019-09-18
        • 2016-12-10
        • 2013-04-24
        • 1970-01-01
        相关资源
        最近更新 更多