1.数据插入
INSERT用来将行插入(或添加)到数据库表,插入方式有:
- 插入完整的行
- 插入行的一部分
- 插入某些查询的结果
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条评论