数据插入(INSERT)
- 顾名思义,INSERT用来将行插入(或添加)到数据库表。通常只能插入一行
- 插入有几种方式:
- 1、插入完整的行;
- 2、插入行的一部分;
- 3、插入某些查询的结果;
1、插入完整的行
INSERT INTO Customers VALUES ('0343454',
'toy land',
'435 Any Street',
'New York',
'NY',
'3333',
'USA',
NULL,
NULL);
// Tip:虽然这种写法很简单,但是并不安全,应尽量避免使用
/* 建议还是使用以下写法比较安全:
因为提供看列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各列出现在表中的实际次序。
优点在于:即使表的结构改变,这条INSERT语句仍然能够正确工作。*/
INSERT INTO Customers (cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
VALUES ('0343454',
'toy land',
'435 Any Street',
'New York',
'NY',
'3333',
'USA',
NULL,
NULL);
2、插入行的一部分
INSERT INTO Customers (cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES ('0343454',
'toy land',
'435 Any Street',
'New York',
'NY',
'3333',
'USA',);
/*
没有给出cust_contact和cust_email这两列提供的值。这表示没必要在INSERT语句中包含它们。
*/
注意:省略列
- 如果表的定义允许,则可以在INSERT操作中省略某些列。不过省略的列必须满足以下某个条件:
- 该列定义为允许NULL值(无值或者空值)
- 在表定义中给出默认值。这表示如果不给出值,将使用默认值。
注意:省略所需的值
- 如果表中不允许有NULL值或者默认值,这是却省略了表中的值,DBMS就会产生错误消息,相应的行不能成功插入。
3、插入某些查询的结果;
INSERT INTO Customers (cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM CustNew;
// 说明:将从CustNew表中查询到的数据插入Customers 表中
从一个表复制到另外一个表(SELECT INTO)
-
说明:INSERT SELECT 和 SELECT INTO的区别
- 它们之间的一个重要差别就是前者导出数据,而后者导入数据。
-
举个栗子:
`SELECT * INTO CustCopy FROM Customers`
/* 说明:
1、 这条SELECT 语句创建一个名为CustCopy的新表,并把Customers表的整个内容复制新表中
2、要想只复制部分的列,可以明确给出列名,而不是使用*通配符。
*/
#### 而MariaDB、MySQL、Oracle、PostgreSQL和SQL使用的语法不一样
`CREAT TABLE CustCopy AS SELECT * FROM Customers`
-
使用SELECT INTO需要知道的一些事情:
- 1、任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY;
- 2、可以利用联结从多个表插入数据
- 3、不管从多少个表中检索数据,数据都只能插入到一个表中。
网友评论