《SQL必知必会》:插入数据 INSERT

SQL必知必会:了解SQL

SQL必知必会:检索数据 SELECT

SQL必知必会:排序检索 SELECT ORDER BY

SQL必知必会:过滤数据 SELECT WHERE

SQL必知必会:高级数据过滤 WHERE AND OR IN NOT

SQL必知必会:通配符过滤 LIKE

SQL必知必会:计算字段 + || concat 算术运算

SQL必知必会:数据处理函数 文本 日期 数值

SQL必知必会:汇总数据 AVG() COUNT() MAX() MIN() SUM()

SQL必知必会:分组数据GROUP BY

SQL必知必会:使用子查询

SQL必知必会:联结表 JOIN

SQL必知必会:高级联结 内联结 外联结 全联结

SQL必知必会:组合查询 UNION

SQL必知必会:插入数据 INSERT

SQL必知必会:更新和删除数据 UPDATE DELETE

SQL必知必会:创建和操纵表 CREATE ALTER DROP RENAME

SQL必知必会:使用视图 CREATE VIEW

1. 数据插入

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

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

提示:插入及系统安全
使用INSERT 语句可能需要客户端/服务器DBMS 中的特定安全权限。
在你试图使用INSERT 前,应该保证自己有足够的安全权限。

1.1 插入完整的行
-- 插入完整的行
INSERT INTO Customers
VALUES
	( '1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL );

提示:INTO 关键字
在某些SQL 实现中,跟在INSERT 之后的INTO 关键字是可选的。但
是,即使不一定需要,最好还是提供这个关键字,这样做将保证SQL
代码在DBMS 之间可移植。

编写依赖于特定列次序的SQL 语句是很不安全
的,这样做迟早会出问题。

编写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 );

下面的INSERT 语句填充所有列(与前面的一样),但以一种不同的次序填充。因为给出了列名,所以插入结果仍然正确:

-- 修改字段顺序
INSERT INTO Customers ( cust_id, cust_contact, cust_email, cust_name, cust_address, cust_city, cust_state, cust_zip )
VALUES
	( '1000000006', NULL, NULL, 'Toy Land', '123 Any Street', 'New York', 'NY', '11111' );

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

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

1.2 插入部分行
-- 插入部分行
INSERT INTO Customers ( cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country )
VALUES
	( '1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA' );

注意:省略列
如果表的定义允许,则可以在INSERT 操作中省略某些列。省略的列
必须满足以下某个条件。
1.该列定义为允许NULL 值(无值或空值)。
2.在表定义中给出默认值。这表示如果不给出值,将使用默认值。

注意:省略所需的值
如果表中不允许有NULL 值或者默认值,这时却省略了表中的值,
DBMS 就会产生错误消息,相应的行不能成功插入。

1.3 插入检索出的数据

把另一表中的顾客列合并到Customers 表中。不需要每次读取一行再将它用INSERT 插入,可以如下进行:

-- 把另一个表中的顾客列表合并到表中
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;

提示:INSERT SELECT 中的列名
为简单起见,这个例子在INSERT 和SELECT 语句中使用了相同的列名。
但是,不一定要求列名匹配。事实上,DBMS 一点儿也不关心SELECT
返回的列名。它使用的是列的位置,因此SELECT 中的第一列(不管
其列名)将用来填充表列中指定的第一列,第二列将用来填充表列中
指定的第二列,如此等等。

提示:插入多行
INSERT 通常只插入一行。要插入多行,必须执行多个INSERT 语句。
INSERT SELECT 是个例外,它可以用一条INSERT 插入多行,不管SELECT
语句返回多少行,都将被INSERT 插入。

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

SELECT
	* INTO CustCopy 
FROM
	Customers;
	
-- 或者
CREATE TABLE CustCopy 
AS SELECT
* 
FROM
	Customers;

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

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

提示:进行表的复制
SELECT INTO 是试验新SQL 语句前进行表复制的很好工具。先进行复
制,可在复制的数据上测试SQL 代码,而不会影响实际的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值