【MySQL】插入数据

588 阅读6分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情

目录

今天阿文结果的内容:

  • 如何插入数据
  • 4种插入数据的格式

插入数据

在使用数据库之前,数据库中必须要有数据,MySQL中使用INSERT语句向数据库表中插入新的数据记录。可以插入的方式有多种:

  • 插入完整的记录
  • 插入记录的一部分
  • 插入多条记录、
  • 插入另一个查询的结果

1.为表的所有字段插入数据

使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值。

语法格式:

INSERT INTO 表名 (字段名列表) VALUES (值1, 值2,...);
  • 表名:指定要插入数据的表名
  • 字段名列表:指定要插入数据的列
  • :指定每个列对应插入的数据,数据类型需和字段的数据类型相同

注意:使用该语句时字段列和数据值的数量必须相同。

例子:

INSERT INTO person (id, name, age, info) VALUES (1, 'Green', 21, 'Lawyer');

查询person表:

image.png

由结果可以看到,INSERT语句成功插入了一条记录。

INSERT语句后面的列名称顺序可以不是person表定义时的顺序。即插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与字段名列表的顺序相同就可以

例子:

INSERT INTO person (age, name, id, info) VALUES (22, 'Suse', 2, 'dancer');

查询person表:

image.png

1.1插入数据时字段名列表为空

使用INSERT插入数据时,允许列名称列表为空,此时,值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同**

例子:

INSERT INTO person VALUES (3, 'Mary', 24, 'Musician');

查询person表:

image.png

在这种情况下,值列表为每一个字段列指定插入值,并且这些值的顺序必须和person表中字段定义的顺序相同。

提示:

虽然使用INSERT插入数据时可以忽略插入数据的列名称,但是值如果不包含列名称,那么VALUES关键字后面的值不仅要求完整而且顺序必须和表定义时列的顺序相同。如果表的结构被修改,对列进行增加、删除或者位置改变操作,这些操作将使得用这种方式插入数据时的顺序也同时改变。如果指定列名称,则不会受到表结构改变的影响

2.为表的指定字段插入数据

为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值,当其他字段没有默认值时会报错的。

例子:

INSERT INTO person(name, age, info) VALUES ('Willam', 20, 'sports man');

查询person表

image.png 可以看到插入数据成功了。在id字段自动添加了一个整数值4,因为id字段为表的主键,不能为空,系统会自动为该字段插入自增的序列值。

2.1插入时不指定插入值

在插入记录时,如果某些字段没有指定插入值,MySQL将插入该字段定义时的默认值

例子:

INSERT INTO person(age, name) VALUES (25, 'Laura');

查询person表:

image.png 可以看到,在我们插入数据时是没有指定info字段值,查询结果显示,info字段是NULL值,这是因为在创建表时,info字段设置的默认值为NULL。

提示: 要保证每个插入值的类型和对应列的数据类型匹配,如果类型不同,将无法插入,并且MySQL会产生错误

3.同时插入多条数据

INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开

例子:

INSERT INTO person(name, age, info) VALUES ('Evans', 27, 'secretary'), ('Dale', 22, 'cook'), ('Edison', 28, 'singer');

查询person表

image.png 可以看到,在INSERT语句执行后,person数据表中添加了三条数据,id为MySQL添加的默认的自增值。

那么在person表中,不指定插入列表,同时插入2条新记录结果又会是如何?

例子:

INSERT INTO person VALUES (9, 'Harry', 21, 'magician'), (NULL, 'Harrite', 19, 'painist');

查询person表:

image.png

可以看到,2条数据成功插入person表中,person表名后面没有指定插入字段列表,因此VALUES关键字后面的多个值列表都要为每一条记录的每一个字段列指定插入值,并且这些值的顺序必须和person表中字段定义的顺序相同,带有AUTO_INCREMENT属性的id字段插入NULL值,系统会自动为该字段插入唯一的自增编号

提示:

一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句,但是多行的INSERT语句在处理过程中效率更高。

4.将查询结果插入到表中

INSERT语句用来给数据表插入记录时指定插入记录的列值。INSERT还可以将SELECT语句查询的结果插入到表中,如果想要从另外一个表中合并个人信息到person表,不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行。

语法格式:

INSERT INTO 表名1 (表名1的字段名列表) SELECT (表名2的字段名列表) FROM 表名2 WHERE 判断条件;
  • 表名1:指定待插入数据的表
  • 表名1的字段名列表:指定待插入表中数据的哪些列
  • 表名2:指定数据是从哪个表查询出来的
  • 表名2的字段名列表:指定数据来源表的查询列
  • 判断条件:指定查询数据的查询条件

注意:表名1的字段名列表表名2的字段名列表的字段个数必须相同且数据类型相同。

查询数据来源表person_old表:

image.png

可以看到,在person_old表中,存在两条数据,接下来将person_old表中的数据插入到person表中。

例子:

INSERT INTO person(id, name, age, info) SELECT id, name, age, info FROM person_old;

查询person表:

image.png

可以看到,成功将person_old表中的数据插入到person表中,这里的id字段为自增的主键,在插入的时候要保证该字段值的唯一性,如果不能确定,可以在插入的时候忽略该字段,只插入其他字段的值。

提示:

这个例子中使用的person_old表和person表的定义相同,事实上,MySQL不关心SELECT返回的列名,它根据列的位置进行插入,SELECT的第1列对应待插入表的第1列,第2列对应待插入表的第2列……即使不同结果的表之间也可以方便地转移数据。


总结

  • 在MySQL中是通过INSERT语句进行数据的插入的
  • 4种插入数据的方式:为表的所有字段插入数据、为表的指定字段插入数据、同时插入多条数据和将查询结果的数据插入

好了,今天阿文就介绍到这了...

byebye!