这是一个MySQL 5.5 DB。您应该能够使用以下语法插入多行值:
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文档,括号应该告诉引擎这些是LISTS值。让我们来看一个例子并修改一个你只添加一行值的实例:INSERT INTO tbl_name (a,b,c)
VALUES(1), (4), (7);
文档的措辞含糊不清,所以我将按照一些人的建议重新组织查询。
答案 0 :(得分:2)
我怀疑你从不同的评论中假设INSERT
语句的作用类似于接受变量参数的函数(例如COALESCE()
或CONCAT_WS()
)。事实并非如此:不是一个功能,你需要在每个列表上使用相同的项目数:
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);
答案 1 :(得分:1)
为什么在每个单值后关闭VALUES括号? SQL知道您希望添加5个不同的行,每行只包含一个值,但您说您将提供五个值。所以你的查询应该是
INSERT INTO users_X_shareItems (userID, itemID, userAction, detail, actionDate) VALUES
('CB381FC5-6373-4D01-A2ED-01CEACFA750B', '16nhbfsg6apltgtfhjkb29z4w', 'like', '', NULL);
修改强> 如果要在一个查询中添加更多行,则仍需提供这5个值。见这个例子
INSERT INTO users_X_shareItems (userID, itemID, userAction, detail, actionDate) VALUES
('CB381FC5-6373-4D01-A2ED-01CEACFA750B', '16nhbfsg6apltgtfhjkb29z4w', 'like', '', NULL),
('row2', 'row2', 'like', '', NULL),
('row3', 'row3', 'like', '', NULL);
答案 2 :(得分:1)
正确的语法:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
但是在你的情况下,你这样做了:
INSERT INTO tbl_name (a,b,c,d,e) VALUES('1'),('2'),('3'),('4'),('5');
括号中的项目总数必须与列总数相同,每行只插入1个值,这会导致不匹配错误。
只需将其更改为:
INSERT INTO users_X_shareItems (userID, itemID, userAction, detail, actionDate) VALUES ('CB381FC5-6373-4D01-A2ED-01CEACFA750B','16nhbfsg6apltgtfhjkb29z4w','like','', NULL)