在 SQL Server 中使用插入、更新和删除操作数据
介绍
在您立志做出数据驱动的决策之前,必须将这些数据存储在某个地方并可供您访问。此外,您还需要确保在需要时更新数据,或在不再需要时将其丢弃。
本指南介绍如何使用 SQL 语句在表中插入、更新和删除记录。虽然我们将使用来自使用 SQL 查询数据 (DQL) 的MySQL 数据库,但此处概述的示例也适用于 Microsoft SQL Server。
实际上,数据插入、更新和删除使用各种方法。这些方法包括手动操作、外部应用程序以及介于两者之间的所有方法。无论使用哪种方法,在底层,一切都归结为 SQL 查询,这些查询要么由人执行,要么自动响应事件。为简单起见,我们将在本指南中使用手动输入,但相同的语句也适用于其他场景。
插入数据
向表中插入新记录的语法非常简单:
INSERT INTO table_name (field1, field2, ...)
VALUES (value1, value2, ...);
在哪里
field1和field2是来自table_name 的字段。
value1和value2分别是field1和field2的值。SQL 允许您灵活地按您希望的顺序列出字段,只要您相应地指定相应的值即可。因此,以下代码等同于上述查询:
INSERT INTO table_name (field2, field1, ...)
VALUES (value2, value1, ...);
值得注意的是,数据类型和长度应与表声明相匹配。在最好的情况下,布尔值(0 或 1)可能适合声明为整数的字段,但反之则不一定。在最坏的情况下,尝试在 VARCHAR(50) 字段中输入 100 个字符的字符串将导致错误或数据被截断。因此,最好在数据类型声明及其使用方面尽可能准确。
- 省略号 ( ... ) 不是 SQL 代码的一部分。它表示语句中还可以包含其他字段及其对应的值。
INSERT的变体允许一次插入多个以逗号分隔的记录,如下所示:
INSERT INTO table_name (field1, field2, ...)
VALUES (value3, value4, ...),
(value5, value6, ...),
(value7, value8, ...);
图 1 说明了这种方法(通常称为批量插入),该方法用于填充上一指南中的客户表。由于customer_id是自动递增列,因此每次插入时都会自动填充。
自动增量字段在 SQL Server 中更广为人知的名称是标识列。它们使用IDENTITY属性声明:customer_id INT IDENTITY(1,1),其中(1,1)表示它将使用相同值的步骤从 1 开始。
此外,您还可以使用SELECT查询的结果向表中插入行。例如,
INSERT INTO table_name (field1, field2, ...)
SELECT fieldX, fieldY FROM other_table;
会将other_table中fieldX和fieldY的所有值插入到table_name中。正如您所预料的,SELECT可以像上面一样简单,也可以很复杂,涉及两个或更多个表。
为了说明这一点,让我们将一本由 Barbara Abercrombie 撰写、Harper Collins 出版的新书《Kicking In the Wall 》添加到我们的图书馆中。
INSERT INTO books
(book_name, book_isbn, book_edition, author_id, publisher_id)
SELECT
'Kicking in the wall' AS book_name, '9781608681563' AS book_isbn,
1 AS book_edition, a.author_id, p.publisher_id
FROM authors AS a, publishers p
WHERE a.author_name = 'Barbara Abercrombie'
AND p.publisher_name = 'Harper Collins';
图 2 显示了执行实际插入之前SELECT 语句本身的输出:
上面的例子还强调了您可以在同一个查询中选择固定值( book_name、book_isbn和book_edition)以及来自数据库的值(author_id和publisher_id )。
现在我们已经了解了如何将数据插入表中,让我们探索如何更新或删除数据库中已有的信息。
继续操作之前,请注意以下几点。在以下两节中,我们将学习如何更新和删除现有数据。无论如何,请务必小心,因为您将修改一个或多个表的内容。根据受影响的行数,撤消更改的唯一方法可能是恢复最近的备份!
更新数据
每当您需要更改一行或多行中某些字段的值时,您都会遇到UPDATE语句。其最简单的语法形式如下:
UPDATE table_name
SET field1 = X,
field2 = Y
WHERE field1 = Z;
其中field1和field2是table_name中的两个字段,它们的值将分别更改为X和Y - 但仅限于field1的当前值为Z 的记录。
您可以根据需要添加任意数量的字段 = 值对,只要它们用逗号分隔即可。
如果省略WHERE子句,则将为表中的所有记录更新这些字段。为了最大限度地减少此操作期间出现人为错误的可能性,您可以遵循一个简单的经验法则:先执行 SELECT 。如果您使用相同的WHERE子句并且它返回预期的行,则可以继续执行UPDATE。
例如,假设我们需要将客户 Jill Devera 的姓名更正为Jack and Jill Devera,将地址更正为62 Fillmore Ave。首先,让我们执行以下查询:
SELECT * FROM customers WHERE customer_name = 'Jill Devera';
如图 3 所示,如果我们确定这是正确的记录,我们可以继续更新文件中的客户姓名和地址。为此,让我们首先删除WHERE子句左侧的所有内容:
WHERE customer_name = 'Jill Devera';
然后在上面添加:
UPDATE customers
SET customer_name = 'Jack and Jill Devera',
customer_address = '62 Fillmore Ave'
WHERE customer_name = 'Jill Devera';
图 3 还显示了UPDATE执行后的另一个SELECT,确认 UPDATE 已成功。请注意,由于名称已更改,因此我们在WHERE子句中使用了customer_id。
删除数据
在我们尝试删除任何记录之前,最好采取与更新操作相同的预防措施。简而言之,只有在应用相同的过滤条件时SELECT返回正确的行,我们才能安全地继续。
您可能想要删除数据的大多数场景对您来说已经很熟悉了。每当您取消订阅电子邮件简报、销售产品(在线或亲自销售)或捐赠办公家具时,都可能涉及DELETE语句。在第一个示例中,您请求将您的地址从分发列表中删除。第二个和第三个场景假设您使用关系数据库跟踪您提供的产品和您管理的办公资产(您应该这样做!)。
要删除table_name中field1的当前值为Z的行,请执行以下操作:
DELETE FROM table_name
WHERE field1 = Z;
坏消息 - 我们的客户 Tim Murphy 取消了他的会员资格,因此现在我们需要从客户表中删除他的名字。首先,我们需要确保他已归还从图书馆借过的所有书籍:
SELECT customer_id FROM customers WHERE customer_name = 'Tim Murphy';
SELECT COUNT(customer_id) FROM loans
WHERE customer_id = 10;
由于结果为 0,如图 4 所示,我们可以使用刚刚学到的知识自信地编写DELETE查询:
DELETE FROM customers
WHERE customer_id = 10;
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~