gpt4 book ai didi

mysql - 列数和值之间的不匹配是怎么回事?

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:22 24 4
gpt4 key购买 nike

这是一个 MySQL 5.5 数据库。您应该能够使用以下语法插入多行值:

INSERT INTO tbl_name (a,b,c)
VALUES(1,2,3), (4,5,6), (7,8,9);

但我在以下查询中遇到错误(“列计数与第 1 行的值计数不匹配”):

INSERT INTO users_X_shareItems (userID, itemID, userAction, detail, actionDate)
VALUES ('CB381FC5-6373-4D01-A2ED-01CEACFA750B'),
('16nhbfsg6apltgtfhjkb29z4w'),
('like'),
(''),
(NULL)

是我的计数能力不足,还是那里有五列的值?在这种情况下,只有一行数据;因此每组括号中只有一个值。但是构建此查询的 PHP 函数采用任意数量的行数据,这是一项功能要求。

请注意,在顶部的示例中,直接来自 MySQL 文档,括号应该告诉引擎这些是值列表。让我们以该示例为例,并修改一个您只添加一行值的实例:

INSERT INTO tbl_name (a,b,c)
VALUES(1), (4), (7);

文档的措辞含糊不清,因此我将按照某些人的建议重新组织查询。

最佳答案

根据不同的评论,我怀疑您假设 INSERT 语句的工作方式类似于接受可变参数的函数(例如 COALESCE()CONCAT_WS())。事实并非如此:is 不是一个函数,您需要在每个列表上使用相同的项目数:

INSERT INTO foo (a) VALUES
(?),
(?),
(?),
(?),
(?);
INSERT INTO foo (a, b) VALUES
(?, ?),
(?, ?),
(?, ?),
(?, ?),
(?, ?);
INSERT INTO foo (a, b, c) VALUES
(?, ?, ?),
(?, ?, ?),
(?, ?, ?),
(?, ?, ?),
(?, ?, ?);

...但永远不会:

-- Not valid
INSERT INTO foo (a, b) VALUES
(?),
(?, ?),
(?, ?, ?);

如果表设计允许,一些实际值可以是 NULL,但不可能完全忽略它们。

如果您需要处理不同的列数,则必须动态构建 SQL 代码。这在大多数编程语言中都是微不足道的。


刚刚看到您的编辑。您误解了多行语法。不是这样的:

-- Not valid
INSERT INTO person (name, age) values
('Abe', 'Bill', 'Charles'),
(23, 45, 17);

是这样的:

INSERT INTO person (name, age) values
('Abe', 23),
('Bill', 45),
('Charles', 17);

关于mysql - 列数和值之间的不匹配是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com