SQL列计数与值计数错误不匹配

时间:2011-04-21 15:19:00

标签: mysql sql

我有这张桌子:

CREATE TABLE `message` (
    `m_id` INT(11) NOT NULL AUTO_INCREMENT,
    `p_id` VARCHAR(30) NOT NULL,
    PRIMARY KEY (`m_id`)
)
ENGINE=InnoDB
ROW_FORMAT=DEFAULT

和此插入

INSERT INTO `message` VALUES ('7');

我收到的“列数与行值计数不匹配”错误。它应该可以正常工作,因为主键是auto_increment

6 个答案:

答案 0 :(得分:12)

通常,当您具有“自动递增”字段时,您不希望指定该列的值。这意味着您从VALUES

中删除了该值

然而正如Johan指出的那样,只要表中的列数与列数不匹配,就必须在目标表上指定列列表。

如果列数或列顺序发生变化,无论如何都要做好的做法

INSERT INTO 
message
(p_id)
Values ('7')

答案 1 :(得分:8)

当值的数量不等于列数时,您必须指定列名称:

INSERT INTO message (p_id) VALUES ('7');

答案 2 :(得分:4)

您需要指定要插入的列。如果不这样做,则数据库假定您提供的值是每列的值,并且根据模式按列的确切顺序。请尝试以下声明。

INSERT INTO `message` (p_id) VALUES ('7');

此外,最好始终在insert语句中指定列。它有助于提高可读性。

答案 3 :(得分:1)

你可以这样做

INSERT INTO `message` VALUES (NULL, '7');

这将匹配列数并忽略空插入到自动增量ID并插入auto increment值;

答案 4 :(得分:0)

试试这个:

INSERT INTO `message` (p_id) VALUES ('7');

您没有指定列,其中有2列,并尝试插入1个值。

答案 5 :(得分:0)

也许你这样做

INSERT INTO message (p_id) VALUES ("7");