第 4 章 插入、更新和删除 插入、更新和删除
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
过去几章的重点是基本查询技术,都围绕着从数据库中获取数据这一任务。本章将反其道而行之,重点讨论以下三个主题领域:
-
在数据库中插入新记录
-
更新现有记录
-
删除不再需要的记录
为便于在需要时查找,本章中的配方按主题分组:所有插入配方排在第一位,其次是更新配方,最后是删除数据配方。
插入通常是一项简单明了的任务。它从插入单行的简单问题开始。但很多时候,使用基于集合的方法创建新行更有效。为此,你还可以找到一次插入多行的技术。
同样,更新和删除开始时也是简单的任务。你可以更新一条记录,也可以删除一条记录。但你也可以同时更新整组记录,而且方法非常强大。删除记录也有很多方便的方法。例如,你可以根据一个表中的记录是否存在于另一个表中来删除这些记录。
SQL 甚至有一种方法,一种标准中相对较新的补充,可以让您一次插入、更新和删除所有数据。这在现在听起来可能不太有用,但 MERGE 语句是同步数据库表和外部数据源(如来自远程系统的平面文件馈送)的一种强大方法。详情请查看本章中的配方 4.11。
4.1 插入新记录
问题
您想在表中插入一条新记录。例如,你想在 DEPT 表中插入一条新记录。DEPTNO 的值应为 50,DNAME 应为 PROGRAMMING,LOC 应为 BALTIMORE。
解决方案
使用带有 VALUES 子句的 INSERT 语句一次插入一条记录:
insert into dept (deptno,dname,loc) values (50,'PROGRAMMING','BALTIMORE')
对于 DB2、SQL Server、PostgreSQL 和 MySQL,您可以选择一次插入一条记录,或通过包含多个 VALUES 列表一次插入多条记录:
/* multi row insert */
insert into dept (deptno,dname,loc)
values (1,'A','B'),
(2,'B','C')
讨论
INSERT 语句允许您在数据库表中创建新行。插入单行的语法在所有数据库品牌中都是一致的。
作为一种快捷方式,您可以在 INSERT 语句中省略列列表:
insert into dept values (50,'PROGRAMMING','BALTIMORE')
但是,如果没有列出目标列,则必须插入表中的所有列,并注意 VALUES 列表中值的顺序;必须按照数据库响应 SELECT * 查询时显示列的顺序提供值。无论采用哪种方式,都应注意列约束,因为如果不向每一列插入,就会创建出某些值为空的记录。如果有列约束不接受空值,这可能会导致错误。
4.2 插入默认值
问题
一个表格可以定义为特定列的默认值。您希望插入一行默认值,而无需指定这些值。
请看下表:
create table D (id integer default 0)
在 INSERT 语句的值列表中,您想插入零,但没有明确指定零。您希望明确插入默认值,无论默认值是什么。
解决方案
所有品牌都支持使用 DEFAULT 关键字来明确指定列的默认值。一些品牌还提供了解决这一问题的其他方法。
下面的示例说明了 DEFAULT 关键字的使用:
insert into D values (default)
您也可以明确指定列名,如果不是插入表中的所有列,则需要这样做:
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access