我有这张桌子:
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
。
答案 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");