和其它数据库一样,在MySQL中,insert用来向表中插入数据,但是有一个小扩展。我们通过例子看看。
库中已有表emp,并有5条数据。
root@database-one 22:26: [gftest]> select * from emp; +--------+------+---------+------------+--------+ | ename | age | sal | hiredate | deptno | +--------+------+---------+------------+--------+ | 郭军 | 27 | 8400.00 | 2019-12-08 | 10 | | 刘杰 | 30 | 9100.00 | 2018-04-09 | 10 | | 王艳 | 24 | 6000.00 | 2020-01-05 | 20 | | 马丽 | 26 | 7200.00 | 2018-07-06 | 30 | | 肖伟 | 29 | 8700.00 | 2017-05-28 | 30 | +--------+------+---------+------------+--------+ 5 rows in set (0.00 sec)
我们新建一张表emp_copy,照搬emp的定义,仅仅将表名修改为emp_copy
root@database-one 22:28: [gftest]> show create table emp \G
*************************** 1. row ***************************
Table: emp
Create Table: CREATE TABLE `emp` (
`ename` varchar(10) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sal` decimal(10,2) DEFAULT NULL,
`hiredate` date DEFAULT NULL,
`deptno` int(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.03 sec)
root@database-one 22:30: [gftest]> CREATE TABLE `emp_copy` (
-> `ename` varchar(10) DEFAULT NULL,
-> `age` int(11) DEFAULT NULL,
-> `sal` decimal(10,2) DEFAULT NULL,
-> `hiredate` date DEFAULT NULL,
-> `deptno` int(2) DEFAULT NULL
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8
-> ;
Query OK, 0 rows affected (0.97 sec)
root@database-one 22:31: [gftest]> select * from emp_copy;
Empty set (0.00 sec)
先来验证下传统的insert方式:
root@database-one 22:31: [gftest]>
root@database-one 22:33: [gftest]> insert into emp_copy select * from emp limit 2;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
root@database-one 22:34: [gftest]> commit;
Query OK, 0 rows affected (0.00 sec)
root@database-one 22:34: [gftest]> select * from emp_copy;
+--------+------+---------+------------+--------+
| ename | age | sal | hiredate | deptno |
+--------+------+---------+------------+--------+
| 郭军 | 27 | 8400.00 | 2019-12-08 | 10 |
| 刘杰 | 30 | 9100.00 | 2018-04-09 | 10 |
+--------+------+---------+------------+--------+
2 rows in set (0.01 sec)
root@database-one 22:34: [gftest]> insert into emp_copy values('王艳',24,6000,'2020-01-05',20);
Query OK, 1 row affected (0.01 sec)
root@database-one 22:35: [gftest]> commit;
Query OK, 0 rows affected (0.00 sec)
root@database-one 22:35: [gftest]> select * from emp_copy;
+--------+------+---------+------------+--------+
| ename | age | sal | hiredate | deptno |
+--------+------+---------+------------+--------+
| 郭军 | 27 | 8400.00 | 2019-12-08 | 10 |
| 刘杰 | 30 | 9100.00 | 2018-04-09 | 10 |
| 王艳 | 24 | 6000.00 | 2020-01-05 | 20 |
+--------+------+---------+------------+--------+
3 rows in set (0.00 sec)
可以看到传统的insert select句式、insert values句式都支持的很好。
同时MySQL对insert还做了个小扩展,可以在一个insert里以非select句式插入多条记录:
root@database-one 22:35: [gftest]> insert into emp_copy (ename,age,sal,hiredate,deptno) values ('马丽',26,7200,'2018-07-06',30),('肖伟',29,8700,'2017-05-28',30);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
root@database-one 22:39: [gftest]> commit;
Query OK, 0 rows affected (0.00 sec)
root@database-one 22:39: [gftest]> select * from emp_copy;
+--------+------+---------+------------+--------+
| ename | age | sal | hiredate | deptno |
+--------+------+---------+------------+--------+
| 郭军 | 27 | 8400.00 | 2019-12-08 | 10 |
| 刘杰 | 30 | 9100.00 | 2018-04-09 | 10 |
| 王艳 | 24 | 6000.00 | 2020-01-05 | 20 |
| 马丽 | 26 | 7200.00 | 2018-07-06 | 30 |
| 肖伟 | 29 | 8700.00 | 2017-05-28 | 30 |
+--------+------+---------+------------+--------+
5 rows in set (0.00 sec)
这里再将详细的语法列出来供大家参考
INSERT statements that use VALUES syntax can insert multiple rows. To do this, include multiple lists of comma-separated column values, with lists enclosed within parentheses and separated by commas.
INSERT INTO tablename (field1,field2,…,fieldn)
VALUES
(record1_values1,record1_values2,…,record1_valuesn),
(record2_values1,record2_values2,…,record2_valuesn),
…,
(recordn_values1,recordn_values2,…,recordn_valuesn);
© 2020, morinson. 版权所有. 欢迎转载,但请保留作者及出处。