2010-07-28 48 views
9

我正在寻找一种方法来为单个列插入数据时执行多个行插入。MySQL:针对单个列的多个插入

下面是示例表:

+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | tinyint(4) | NO | PRI | NULL | auto_increment | 
| name | varchar(40) | NO | UNI | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 

我希望能够插入像(“管理”,“作家”,“国防部”,“用户”,“客人”)将其命名为每行的列。

MySQL的文档显示多个刀片应采用以下格式:

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

但是我的发言结束了看起来像这样:

INSERT INTO User_Role(name) VALUES ('admin','author','mod','user','guest'); 

而且我得到以下几点:
ERROR 1136 (21S01):列计数与第1行的值计数不匹配

这意味着它认为我正在尝试执行一个si单行插入。

我不确定我是否仅仅在这里错过了一些简单的东西,但在这个用例的MySQL文档中我没有看到任何特别的东西。

回答

18

您的语法有点偏离。将圆括号放在您试图插入的每个数据“set”(在这种情况下表示单个值)。

INSERT INTO User_Roll(name) VALUES ('admin'), ('author'), ('mod'), ('user'), ('guest'); 
+0

啊,谢谢!第一次使用多插入语法。我会接受一旦它让我 – tsgrasser 2010-07-28 18:58:29

+1

你应该也知道这不适用于MSSQL。 MySQL和其他一些支持多个插入,但上次我使用SQL Server时,它不接受该语法。 – 2010-07-28 19:01:51

+0

我知道这是一个非常古老的答案,但只是想我会提到,从2008版本开始,这也适用于MSSQL。 – user1751825 2016-12-22 03:18:44

0

我会建议你不要在一列中放置多个值。 制作一个新表:

 INSERT INTO table_name (id, name) VALUES (1, 'name1'), (1, 'name2'), (1, 'name3'), (1, 'name4');