【问题标题】:Column count doesn't match value count at row 1列数与第 1 行的值数不匹配
【发布时间】:2022-12-09 22:08:36
【问题描述】:

所以我阅读了其他帖子,但这个问题很独特。所以这个 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!!!!!
      • 想象一下,如果有人别的扣动扳机需要多少头疼!为什么不把触发器名称放在错误中!?很高兴它有所帮助,@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');`
      

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

      【讨论】:

        【解决方案6】:

        在我的例子中,我只是传递了错误的名称表,所以 mysql 无法找到正确的列名称。

        【讨论】:

          猜你喜欢
          • 2017-06-21
          • 2019-10-28
          • 2013-08-24
          • 2015-07-19
          • 1970-01-01
          相关资源
          最近更新 更多