数据库学习笔记——15 插入数据

1 数据插入

顾名思义,INSERT用来将行插入(或添加)到数据库表。插入有几种方式:

  • 插入完整的行;
  • 插入行的一部分;
  • 插入某些查询结果。

1.1 插入完整的行

INSERT INTO customers VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);
存储到表中每一列的数据在VALUES子句中给出,必须给每一列提供一个值。
虽然这种语法很简单,但并不安全。
编写INSERT语句更安全(不过更繁琐)的方法如下:
INSERT INTO customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);
因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各列名出现在表中实际次序。其优点是,即使表的结构改变,这条INSERT语句仍然能正确工作。
下面的INSERT语句填充所有的列(与前面的一样),但以一种不同的次序填充。因为给出了列名,所以插入结构任然正确:
INSERT INTO customers(cust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) VALUES('1000000006',NULL,NULL,'Toy Land','123 Any Street','New York','NY','11111','USA');

1.2 插入部分行

只给某些列提供值。
INSERT INTO customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) VALUES('1000000007','张三','舜华路2000号','济南','JN','25000','CN');

注意:省略列
省略的列必须满足以下某个条件。

  • 该列定义为允许NULL值(无值或空值)
  • 在表定义中给出默认值。这表示如果不给出值,将使用默认值。

1.3 插入检索出的数据

INSERT SELECT是有一条INSERT语句和一条SELECT语句组成的。
INSERT INTO customers(cust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) SELECT cust_id,cust_contact,cust_email,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country FROM custnew;
这个例子从一个名为custnew 的表中读出数据并插入customers表。在填充custnew时,不应该使用已经在customers中用过的cust_id值。

提示:INSERT SELECT中的列
事实上,DBMS已点也不关心SELECT返回的列名,它使用的是列的位置。

INSERT SELECT中SELECT语句可以包含WHERE子句,以过滤插入的数据。

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

要将一个表的内容复制到一个全新的表(运行中创建的表),可以使用SELECT INTO语句。
与INSERT SELECT将数据添加到一个已经存在的表不同,SELECT INTO将数据赋值到一个新表。

说明:INSERT SELECT与SELECT INTO
它们之间的一个重要差别是前者插入数据,而后者导出数据。

SELECT * INTO custcopy FROM customers
但是MySQL使用的语法稍有不同:
CREATE TABLE custcopy AS SELECT * FROM customers;
在使用SELECT INTO时,需要知道:

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

例子:
CREATE TABLE tempmi AS SELECT c.cust_id,o.order_num FROM customers AS c RIGHT OUTER JOIN orders AS o ON c.cust_id = o.cust_id;

你可能感兴趣的:(数据库学习笔记——15 插入数据)