暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql insert into 插入数据方法一览无余

运维家 2022-11-17
2013

 

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条数据,并再次插入了进去。

至此,本文结束。 

长按以识别二维码关注运维家~
微信号:yunweijia0909


往期推荐

mysql查询语法大杂烩,看了这篇就够了

centos7修改默认启动级别

mysql函数汇总之日期和时间函数


文章转载自运维家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论