数据插入

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


一、插入完整的行

关键字:INSERT INTO xxxx VALUES()
表名:customers
代码如下:
方法1(这种方法不安全,因为要记住表中的列的次序)

INSERT INTO customers 
VALUES('10001',
'TOY LAND',
'NEW YORK',
'USA')

方法2(繁琐但安全且在表的列次序变化的情况下也适用)

INSERT INTO customers(cust_id,
cust_name,
cust_city,
cust_country)
VALUES('10001',
'TOY LAND',
'NEW YORK',
'USA')

注意:不管使用哪种INSERT语法,VALUES的数目都必须正确。如果不提供列名,则必须给每个表列提供一个值;如果提供列名,则必须给列出的每个列一个值。否则,就会产生一条错误消息,相应的行不能成功插入。

二、插入部分行

在上述推荐插入行的方法中,建议明确给出列名,使用这种语法,还可以省略列,但是要符合一些前提条件:

  • 该列定义为允许NULL值(无值或空值)。
  • 在表定义中给出默认值。这表示如果不给出值,将使用默认值。
  • 如果表中不允许有NULL值或者默认值,这时却省略了表中的值,DBMS就会产生错误消息,相应的行不能成功插入。
    例如要给customers表中的插入一行只有的id和名字的行,如下:
INSERT INTO customers(cust_id,cust_name)
VALUES('1002',
'Talor Band')

三、插入检索出的数据

INSERT 可用来插入一行语句,如果想从其他表中将多行数据插入,可结合SELECT 语句,如下:

INSERT INTO customers(cust_id,
cust_name,
cust_city,
cust_country)
SELECT cust_id,
cust_name,
cust_city,
cust_country
FROM custnew;

注意:

  • 插入的新的行的主键不能与表中的主键相同;
  • select 中的列名不一定一定要与原表的相同;
  • INSERT SELECT中SELECT语句可以包含WHERE子句,以过滤插入的数据;
  • INSERT通常只插入一行。要插入多行,必须执行多个INSERT语句。INSERT SELECT是个例外,它可以用一条INSERT插入多行,不管SELECT语句返回多少行,都将被INSERT插入。

四、从一个表复制到另一个表

关键字:select into

  • 与INSERT SELECT将数据添加到一个已经存在的表不同,SELECT INTO将数据复制到一个新表(有的DBMS可以覆盖已经存在的表,这依赖于所使用的具体DBMS)。
  • insert select 与 select into 的重要区别还在于前者是插入数据,后者是导出数据。
SELECT * 
INTO custcopy 
FROM customers;

这条语句创建了新的表,并把customers中的数据全部复制到custcopy中去。但是MySQL的语法稍微不同,如下:

CREATE TABLE custcopy AS 
SELECT * FROM customers;
  • 任何SELECT选项和子句都可以使用,包括WHERE和GROUPBY;
  • 可利用联结从多个表插入数据;
  • 不管从多少个表中检索数据,数据都只能插入到一个表中。

总结

本文主要是SQL必知必会的知识点,学习过程中所作的笔记;

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐