在实际开发中,可能会遇到向数据表中插入多条记录的情况,用INSERT语句可以一条一条地插入数据,但这样做明显比较麻烦,这时可以进行批量插入数据,提高工作效率。接下来分为两个方面讲解,一个是为所有列批量插入数据,另一个是为指定列批量插入数据。
1.为所有列批量插入数据
实际上,使用一条INSERT语句就可以实现数据的批量插入。与插入一条数据类似,批量插入时,语句中罗列多个VALUES即可,语法格式如下所示。
INSERT INTO 表名[(字段名1,字段名2,……)]
VALUES(值1,值2,……),(值1,值2,……),……,(值1,值2,……);
以上示例中,“字段名1,字段名2”表示数据表中的字段名称,是可选的,“值1,值2”表示每个字段要添加的数据,每个值的顺序、类型必须与字段名对应。
在讲解案例之前,首先在数据库qianfeng2中创建一个教师表teacher,如表所示。
teacher表
字段 |
数据类型 |
说明 |
id |
INT |
教师编号 |
name |
VARCHAR(50) |
教师姓名 |
age |
INT |
教师年龄 |
首先使用qianfeng2数据库,SQL语句如下所示。
mysql> USE qianfeng2;
Database changed
现在可以创建数据表teacher,SQL语句如下所示。
mysql> CREATE TABLE teacher(
-> id INT,
-> name VARCHAR(50),
-> age INT
-> );
Query OK, 0 rows affected (0.16 sec)
以上执行结果证明表创建完成。为了进一步验证,使用DESC语句查看库中的emp表,SQL语句如下所示。
mysql> DESC teacher;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.06 sec)
从以上执行结果可看出,teacher表成功创建。
接下来通过具体案例演示为所有列批量插入数据,如例3-4所示。
通过INSERT语句为所有列批量插入数据,SQL语句如下所示。
mysql> INSERT INTO teacher(id,name,age)
-> VALUES(1,'AA',20),(2,'BB',21);
Query OK, 2 rows affected (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 0
以上执行结果证明插入数据完成,这是通过一条SQL语句插入了两条数据。为了进一步验证,使用SELECT语句查看teacher表中的数据,SQL语句如下所示。
mysql> SELECT * FROM teacher;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | AA | 20 |
| 2 | BB | 21 |
+------+------+------+
2 rows in set (0.00 sec)
从以上执行结果可看出,teacher表中的数据批量插入成功。另外,SQL语句中字段名是可以省略的。接下来演示省略字段名的情况,SQL语句如下所示。
mysql> INSERT INTO teacher
-> VALUES(3,'CC',22),(4,'DD',23);
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0
以上执行结果证明插入数据完成,这是省略字段名,通过一条SQL语句插入了2条数据。为了进一步验证,使用SELECT语句查看teacher表中的数据,SQL语句如下所示。
mysql> SELECT * FROM teacher;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | AA | 20 |
| 2 | BB | 21 |
| 3 | CC | 22 |
| 4 | DD | 23 |
+------+------+------+
4 rows in set (0.00 sec)
从以上执行结果可看出,teacher表中的数据批量插入成功。
2.为指定列批量插入数据
数据批量插入时,同样可以指定某几列,其他列自动使用默认值,这与前面学习为指定列插入一条数据类似。
接下来通过具体案例演示为指定列批量插入数据,如例3-5所示。
向teacher表批量插入数据,且只插入前两列数据,SQL语句如下所示。
mysql> INSERT INTO teacher(id,name)
-> VALUES(5,'EE'),(6,'FF');
Query OK, 2 rows affected (0.13 sec)
Records: 2 Duplicates: 0 Warnings: 0
以上执行结果证明插入数据完成,这是指定前两个字段,通过一条SQL语句插入了两条数据。为了进一步验证,使用SELECT语句查看teacher表中的数据,SQL语句如下所示。
mysql> SELECT * FROM teacher;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | AA | 20 |
| 2 | BB | 21 |
| 3 | CC | 22 |
| 4 | DD | 23 |
| 5 | EE | NULL |
| 6 | FF | NULL |
+------+------+------+
6 rows in set (0.00 sec)
从以上执行结果可看出,teacher表中的数据批量插入成功,且只为前两列插入了数据,第三列使用的是默认值。