
mysql
中使用insert
语句向数据库表中插入新的数据记录。
环境创建
新建一个数据表yanshi
用来做演示;
mysql> create table yanshi (id int unsigned not null auto_increment, name char(50) not null default '', age int not null default 0, info char(50) null, primary key(id));
Query OK, 0 rows affected (0.03 sec)
mysql>
查看下yanshi
表结构;
mysql> desc yanshi;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | char(50) | NO | | | |
| age | int | NO | | 0 | |
| info | char(50) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql>
给数据表的所有字段插入数据
基本语法
insert into table_name (column_list) values (values_list);
table_name
:插入数据的表名;
column_list
:插入数据的列明(可选);
values_list
:每个列对应插入的数据。
PS:使用该语句时,字段列和数据值的数量必须相同。
向表中所有字段插入值的方法有两种:
1、指定所有字段名;
2、完全不指定字段名;
示例
1、指定所有字段名
mysql> insert into yanshi (id, name, age, info) values (1, 'zhangsan', 20, 'heihei');
Query OK, 1 row affected (0.01 sec)
mysql>
查看下数据表中的内容;
mysql> select * from yanshi;
+----+----------+-----+--------+
| id | name | age | info |
+----+----------+-----+--------+
| 1 | zhangsan | 20 | heihei |
+----+----------+-----+--------+
1 row in set (0.00 sec)
mysql>
2、不指定所有字段名
mysql> insert into yanshi values (2, 'lisi', 25, 'haha');
Query OK, 1 row affected (0.01 sec)
mysql>
查看下数据表的内容;
mysql> select * from yanshi;
+----+----------+-----+--------+
| id | name | age | info |
+----+----------+-----+--------+
| 1 | zhangsan | 20 | heihei |
| 2 | lisi | 25 | haha |
+----+----------+-----+--------+
2 rows in set (0.00 sec)
mysql>
注意点:
当我们指定列名的时候,顺序是可以和表中字段名的顺序不一样的;
但是当我们不指定列名的时候,顺序是必须和表中字段名的顺序保持一致。
建议指定列名,因为如果不指定列名的情况下,后续一旦表结构发生变化,那么这条
sql
将无法成功运行。
给数据表的指定字段插入数据
给数据表的指定字段插入数据,就是说在使用insert
语句中只向部分字段插入值,而其他字段的值为表定义时的默认值。
示例
给yanshi
数据表插入一条新数据,name
值为wangwu
,age
值为25
,info
值为navicat
;
mysql> insert into yanshi (name, age, info) values ('wangwu', 25, 'navicat');
Query OK, 1 row affected (0.01 sec)
mysql>
查看下数据表的内容;
mysql> select * from yanshi;
+----+----------+-----+---------+
| id | name | age | info |
+----+----------+-----+---------+
| 1 | zhangsan | 20 | heihei |
| 2 | lisi | 25 | haha |
| 3 | wangwu | 25 | navicat |
+----+----------+-----+---------+
3 rows in set (0.00 sec)
mysql>
可以看到id
这个字段虽然我们没有指定,但是他作为主键,且具有自增的特性,所以他自增了1,也就是3了。
我们再来给yanshi
数据表中插入一条数据,name
值为zhaoliu
,age
值为30
,info
值这次我们不指定,看下效果;
mysql> insert into yanshi (name, age) values ('zhaoliu', 30);
Query OK, 1 row affected (0.01 sec)
mysql>
查看下数据表的内容;
mysql> select * from yanshi;
+----+----------+-----+---------+
| id | name | age | info |
+----+----------+-----+---------+
| 1 | zhangsan | 20 | heihei |
| 2 | lisi | 25 | haha |
| 3 | wangwu | 25 | navicat |
| 4 | zhaoliu | 30 | NULL |
+----+----------+-----+---------+
4 rows in set (0.00 sec)
mysql>
可以看到这次我们没有指定info
字段的值,但是他也是自动按照默认值添加了一个null
值。
同时插入多条数据
insert
语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开即可;
基本语法
insert into table_name (column_list) values (values_list), (values_list2),...,(values_listn);
示例
在yanshi
数据表中,指定name
、age
字段,同时插入3条数据;
mysql> insert into yanshi (name, age) values ('test1', 31), ('test2', 32), ('test3', 33);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>
查看下表数据;
mysql> select * from yanshi;
+----+----------+-----+---------+
| id | name | age | info |
+----+----------+-----+---------+
| 1 | zhangsan | 20 | heihei |
| 2 | lisi | 25 | haha |
| 3 | wangwu | 25 | navicat |
| 4 | zhaoliu | 30 | NULL |
| 5 | test1 | 31 | NULL |
| 6 | test2 | 32 | NULL |
| 7 | test3 | 33 | NULL |
+----+----------+-----+---------+
7 rows in set (0.00 sec)
mysql>
将查询结果插入到表中
insert
语句用来给数据表插入记录时指定插入记录的列值。insert
还可以将select
语句查询的结果插入到表中。
基本语法
insert into table_name1 (column_list1) select column_list2 from table_name2 where (condition);
table_name1
:指定待插入数据的表;
column_list1
:指定插入表中要插入数据的哪些列;
table_name2
:指定插入数据是从那个表中查询出来的;
column_list2
:指定数据来源表的查询列,该列表必须和column_list1
列表中的字段个数相同,数据类型相同;
condition
:指定select
语句的查询条件;
示例
这里咱们就使用一张表的数据吧,既然是演练,无需再次新建一个数据表了,我们就从这个表中查询出来的数据再次插入即可。
mysql> insert into yanshi (name, age, info) select name, age, info from yanshi where id >= 5;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>
查看test
数据表中的内容;
mysql> select * from yanshi;
+----+----------+-----+---------+
| id | name | age | info |
+----+----------+-----+---------+
| 1 | zhangsan | 20 | heihei |
| 2 | lisi | 25 | haha |
| 3 | wangwu | 25 | navicat |
| 4 | zhaoliu | 30 | NULL |
| 5 | test1 | 31 | NULL |
| 6 | test2 | 32 | NULL |
| 7 | test3 | 33 | NULL |
| 8 | test1 | 31 | NULL |
| 9 | test2 | 32 | NULL |
| 10 | test3 | 33 | NULL |
+----+----------+-----+---------+
10 rows in set (0.00 sec)
mysql>
可以看到我们确实查出来了3条数据,并再次插入了进去。
至此,本文结束。

往期推荐




