重学MYSQL之插入数据

数据库 2020-09-09 712

1.数据插入

INSERT用来将行插入(或添加)到数据库表,插入方式有:

  1. 插入完整的行
  2. 插入行的一部分
  3. 插入某些查询的结果

1.1 插入完整的行

INSERT INTO blog_banner VALUES(NULL, '测试2', 'banner/2019/07/666.jpg', 'https://www.baidu.com', 6, NOW());

 添加一条新数据到banner表。请注意NULL值,这是主键id字段,尽管设置了自增,但是还是得设置一个值。

这种写法高度依赖表中列的定义次序,还依赖于其容易获得的次序信息,即使知道次序信息,当表的结构发生改变时,修改也会变得麻烦。

编写INSERT语句更安全(不过更繁琐)的方法如下:

INSERT INTO blog_banner(id, title, image, uri, banner_index, add_time) VALUES(NULL, '测试3', 'banner/2019/07/666.jpg', 'https://www.baidu.com', 7, NOW());

因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各列出现在表中的实际次序。其优点在于,即使表的结构改变,这条语句仍可以正常工作。

提示:不要使用没有明确给出列的INSERT语句。给出列能使SQL语句继续发挥作用,即使表结构改变。

注意:不管使用哪种INSERT语法,VALUES的数目都必须正确。

1.2 插入部分行

使用INSERT推荐方法是明确给出表的列名。使用这种语法,还可以省略列,这表示可以只给某些列提供值,给其他列不提供值。

INSERT INTO blog_banner(title, image, uri, banner_index, add_time) VALUES('测试4', 'banner/2019/07/666.jpg', 'https://www.baidu.com', 8, NOW());

因为id是自增的,上一条语句设置为NULL,所以省略了id字段,但是插入依然是成功的

1.3 插入检索出的数据

INSERT还存在另一种形式,可以利用它将SELECT语句的结果插入表中,这就是所谓的INSERT SELECT。顾名思义,它是由一条INSERT语句和SELECT语句组成。

它可以将另一个表的数据合并到另一个表中。由于本地没有现成的表,因此,我使用同一个表来演示这种关系

INSERT INTO blog_banner(title, image, uri, banner_index, add_time) SELECT title, image, uri, banner_index, add_time FROM blog_banner;

效果:

可以看到原数据被拷贝了一份,加入到该表中。

提示:INSERT SELECT语句不一定要求列名匹配,事实上,数据库不关心返回的列名。它使用的是列的位置,因此SELECT中第一列(不管列名)将用来填充表列中的指定的第一列,第二列将用来填充表列中指定的第二列。

2.从一个表复制到另一个表

有一种数据插入不依赖INSERT语句。要将一个表的数据复制到一个全新的表,可以使用SELECT INTO语句。DB2数据库不支持

使用SELECT INTO语句

SELECT * INTO test_banner FROM blog_banner;

该语句的作用是:创建一个名为test_banner的新表,并把blog_banner表的整个内容复制到新表中。如果你只想复制部分字段,可以明确给出列名,而非通配符*。

MariaDB、MYSQL、Oracle、PostgreSQL和SQLite使用的语法稍有不同。

CREATE TABLE test_banner AS SELECT * FROM blog_banner;

在使用SELECT INTO时,需要知道一些事情:

  • 任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY
  • 可利用联结从多个表中插入数据
  • 不管从多少个表中检索数据,数据都只能插入到一个表中 

标签:数据库

文章评论

评论列表

已有0条评论