使用INSERT语句,其基本语法格式如下:
INSERT [ IGNORE ] [ INTO ] 表名( 字段名称1 [ , 字段名称2 … ] )
VALUES ( { 表达式1 | DEFAULT } [ , { 表达式2 | DEFAULT } … ] );
IGNORE:当插入不符合数据完整性约束的数据时,不执行该语句,当作一条警告处理。
字段名称:省略时表示要插入全部字段的数据,否则必须指定要插入数据的字段名称。
VALUES 子句:指定各个字段要插入的具体数据。数据的顺序与字段名称的顺序一致。
表达式:可以是常量、变量或者一个表达式,也可以是空值。字符串型或日期和时间型数据常量必须用英文单引号或双引号引起来。
DEFAULT:插入该字段的默认值。
一、插入一条记录的全部数据
1.插入一条记录的全部数据
mysql> USE INSERTTEST;
Database changed
mysql> CREATE TABLE employees
-> (
-> emp_id CHAR(3) NOT NULL PRIMARY KEY,
-> emp_name VARCHAR(50) UNIQUE,
-> emp_department VARCHAR(50)
-> );
Query OK, 0 rows affected (0.07 sec)
mysql>
1.对所有插入数据省略字段名称
mysql> INSERT INTO employees
-> VALUES("001","张三","市场部");
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM employees;
+--------+----------+----------------+
| emp_id | emp_name | emp_department |
+--------+----------+----------------+
| 001 | 张三 | 市场部 |
+--------+----------+----------------+
1 row in set (0.00 sec)
2.对所有插入数据不省略字段名称
mysql> INSERT INTO employees(emp_id, emp_name, emp_department)
-> VALUES("002","李四","营销部");
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM employees;
+--------+----------+----------------+
| emp_id | emp_name | emp_department |
+--------+----------+----------------+
| 001 | 张三 | 市场部 |
| 002 | 李四 | 营销部 |
+--------+----------+----------------+
2 rows in set (0.00 sec)
二、插入一条记录的部分数据
mysql> INSERT INTO employees(emp_id, emp_name)
-> VALUES("003","王五");
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM employees;
+--------+----------+----------------+
| emp_id | emp_name | emp_department |
+--------+----------+----------------+
| 001 | 张三 | 市场部 |
| 002 | 李四 | 营销部 |
| 003 | 王五 | NULL |
+--------+----------+----------------+
3 rows in set (0.00 sec)
为什么不缺失emp_id?因为emp_id
是 NOT NULL PRIMARY KEY
,但没有设置自增属性,当你没有为 emp_id
提供值时,MySQL 不知道应该插入什么值,否则如下:
mysql> INSERT INTO employees(emp_name, emp_department)
-> VALUES("王五","调研部");
ERROR 1364 (HY000): Field 'emp_id' doesn't have a default value
三、插入多条记录的数据
mysql> INSERT INTO employees
-> VALUES("004","赵六","销售部"),
-> ("005","孙七","产品部"),
-> ("006","刘八","运营部");
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM employees;
+--------+----------+----------------+
| emp_id | emp_name | emp_department |
+--------+----------+----------------+
| 001 | 张三 | 市场部 |
| 002 | 李四 | 营销部 |
| 003 | 王五 | NULL |
| 004 | 赵六 | 销售部 |
| 005 | 孙七 | 产品部 |
| 006 | 刘八 | 运营部 |
+--------+----------+----------------+
6 rows in set (0.00 sec)
四、插入查询结果中的数据
INSERT [ IGNORE ] [ INTO ] 表名1 ( 字段名称1 [ , 字段名称2, … ])
SELECT ( 字段名称1 [ , 字段名称2, … ]) FROM 表名2;
新建数据表 employees1,其结构与院系表 employees 完全相同,然后将employees表中的所有数据插入employees1表中。
mysql> CREATE TABLE employees1 LIKE employees;
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO employees1 SELECT * FROM employees;
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM employees1;
+--------+----------+----------------+
| emp_id | emp_name | emp_department |
+--------+----------+----------------+
| 001 | 张三 | 市场部 |
| 002 | 李四 | 营销部 |
| 003 | 王五 | NULL |
| 004 | 赵六 | 销售部 |
| 005 | 孙七 | 产品部 |
| 006 | 刘八 | 运营部 |
+--------+----------+----------------+
6 rows in set (0.00 sec)
五、插入并替换已存在的数据
mysql> REPLACE INTO employees1
-> VALUES("004","赵六","销售部"),
-> ("007","陈九","产品部");
Query OK, 3 rows affected (0.01 sec)
Records: 2 Duplicates: 1 Warnings: 0
mysql> INSERT INTO employees1
-> VALUES("004","赵六","销售部"),
-> ("007","陈九","产品部");
ERROR 1062 (23000): Duplicate entry '004' for key 'employees1.PRIMARY'