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

标签 mysql sql

这是一个 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/

相关文章:

mysql - SQL 查询在 phpMyAdmin 中有效,但在 Java 中无效

Python Pandas : equivalent to SQL's aggregate functions?

sql - 使用 GROUP BY 查询获取行数

SQL - 查询拆分原始排序

javascript - 如何使用javascript获取一行表中的单元格值?

mysql - 无法在 AWS-mysql 中创建表并抛出错误代码 1044。拒绝用户 'user1' @'%' 访问数据库 'mysqlDB'

mysql - 如何在运行 SQL Update 语句之前对其进行测试?

SQL通过将两个列表传递给两列来检索数据

c# - 为什么我的 mysql 查询总是返回一个 int 值而不是 boolean?

mysql - google maps mysql查询查找公交车