SQL Server基础:使用SQL Insert、SQL Update、SQL Delete和Truncate修改表数据

表格是每个关系数据库系统的核心组件之一,SQL Server也不例外。表格存储了关系数据库引擎用于查询、报告和其他操作的数据。在本文中,我将向您展示如何使用T-SQL INSERT、T-SQL UPDATE、T-SQL DELETE和TRUNCATE修改SQL Server表中的数据。

在我的上一篇文章《Essential SQL Server: 创建数据库和表》中,我展示了如何创建基本的SQL Server数据库和表。在本文中,我们将了解如何通过添加、更新和删除行来填充这些表。

广告

I created the following table in my previous article. The syntax from this simple example DDL command shows that the table has three columns and each of them uses a different data type:

CREATE TABLE dbo.myLogins
 (
     id INT NOT NULL PRIMARY KEY,
    name VARCHAR (20),
    login_date DATETIME
 );

在本文中,我们将介绍使用INSERT语句向表中添加数据,使用UPDATE语句修改表中的数据,以及使用DELETE语句删除数据。表中的数据可以通过几种不同的方式删除,因此我们还将介绍使用DELETE语句和TRUNCATE语句之间的区别。

使用T-SQL INSERT添加行

您可以通过多种方式向SQL Server表中添加数据:

  • 您可以使用SQL Server管理工作室(SSMS)的交互式查询设计器向表中添加行
  • 您可以使用 PowerShell
  • 您可以使用 SQL Server 导入和导出向导或集成服务将数据导入表中
  • 您可以使用命令行工具 bcp 实用程序

也可以使用 SQL INSERT 语句将数据添加到 SQL Server 表中,这是最常见的方法。T-SQL INSERT 语句将一个或多个行添加到 SQL Server 表中。

广告

以下示例显示如何向您之前看到的示例表中添加一行:

INSERT INTO myLogins (id, name, login_date) VALUES (2, 'John Smith', '3-12-2023')

这里,INSERT INTO语句标识将包含插入行的表。接下来,在括号内,您可以看到将要使用的列的列表。此列表使用表中的所有列,但您不必这样做。

最后,VALUES子句提供将插入到表中的实际值。作为快捷方式,您可以在INSERT语句中省略列列表。例如,以下INSERT语句执行与前面示例完全相同的功能:

INSERT INTO myLogins VALUES (2, 'John Smith', '3-12-2023')
As a shortcut, you can omit the column list in an INSERT statement (Image credit: Petri/Michael Otey)

除非使用NOT NULL关键字定义列,否则您还可以在INSERT语句的值列表中明确指定NULL。或者,当您不希望为列指定值时,可以将该列排除在您的列和值列表之外,这将导致它包含一个NULL值。

广告

从查询结果中插入表行

除了使用带有VALUES子句的标准T-SQL INSERT语句外,您还可以通过SQL查询将行添加到表中。查询可以是简单的或复杂的,并且结果可以插入到目标表中。

例如,要将myLogins2表中的行复制到myLogins表中,您可以使用下面所示的查询:

INSERT INTO myLogins (id, name, login_date) SELECT id, name, login_date FROM myLogins2 where id > 50.

此示例使用来自myLogins2表的子查询结果将行插入到myLogins表中。INSERT语句将数据插入到表中的三列中。子查询使用SELECT语句从名为myLogins2的第二个表中选择相同的三列。

然而,在这个例子中,只有id值大于50的行将被返回并添加到myLogins表中。在这个简单的例子中,列名是相同的,但这不是必需的。为了使其工作,您需要在myLogins2表中有一个或多个id值大于50的行,这些行在myLogins表中不存在。

使用T-SQL UPDATE更新行

就像向表中添加行一样,您可以使用多种方法修改表中的行。SSMS的查询设计器使您能够交互式地更新行,但您也可以使用PowerShell或集成服务。

然而,在数据库表中修改现有行的最常见方法是使用SQL UPDATE语句。 T-SQL UPDATE语句修改SQL Server表中一个或多个行中的值。

通常,您会希望使用UPDATE语句以及WHERE子句来指定要更新的行。如果您不使用WHERE子句,那么表中的所有行都将被更新。以下清单显示了使用T-SQL UPDATE语句修改myLogins表中一行值的简单示例。

UPDATE myLogins SET name = ‘John Smith’ WHERE id = 1

正如我所提到的,如果省略WHERE子句,每一行的name列都将设置为新值。同样,如果WHERE子句包括多行,就像使用<或>运算符一样,那么将更新多个匹配的行。

更新查询结果的表行

就像使用INSERT语句一样,您也可以使用另一个表中的值来更新一个表中的行。在以下清单中,您可以看到如何使用来自另一个表的SQL更新。

UPDATE myLogins SET myLogins.name = myLogins2.name FROM myLogins2 WHERE myLogins.id = myLogins2.id

在这里,您可以看到UPDATE语句将作用于myLogins表,并且name列将使用myLogins2表中的值进行更新,其中两个表的id列的值匹配。

The UPDATE statement lets you update rows in one table using values from another table (Image credit: Petri/Michael Otey)

正如您可能猜到的那样,使用UPDATE语句有很多更多选项。您的查询可以更新多行,可以使用连接创建更复杂的查询,还可以使用TOP子句、ORDER BY子句、公用表表达式(CTEs)等来构建您的更新查询。

使用T-SQL DELETE和TRUNCATE删除行

如您所期望,您可以使用交互式的SSMS查询设计器、PowerShell或集成服务从表中删除行。然而,最常用的方法是使用SQL DELETE语句。

`T-SQL DELETE`语句从SQL Server表中删除一行或多行。不用说,你应该小心使用SQL DELETE语句,因为它会永久删除表中的数据。如果你犯了一个错误,你可能需要从快照、事务日志或备份中恢复数据。`

`以下示例展示了如何从myLogins表中删除一行:`

DELETE FROM myLogins WHERE id = 1

`在此示例中,可以看到myLogins表中id列值为1的行将被删除。你还可以通过更改WHERE子句来删除多行,如下面的语句,它将删除id值大于50的所有行。`

DELETE FROM myLogins WHERE id &gt; 50
You can delete multiple rows by changing the WHERE clause (Image credit: Petri/Michael Otey)

`与UPDATE语句一样,如果省略WHERE子句,表中的所有行将被删除。例如,以下示例删除myLogins表中的所有行:`

DELETE FROM myLogins

从查询结果中删除行

`与INSERT和UPDATE语句一样,DELETE语句也可以从查询结果中执行。以下示例展示了如何基于查询删除行:`

DELETE FROM myLogins WHERE login_date &lt; '12-31-2022'

`在此示例中,将删除myLogins表中login_date列日期小于12/31/22的所有行。`

I’ve been using simple examples throughout this article, but like the INSERT and UPDATE statements, your queries can be much more complex. You could use JOINs and multiple tables in the DELETE statement’s subquery, use clauses like TOP and ORDER BY, and more.

DELETE与TRUNCATE的区别`

T-SQL的DELETE命令能够从表中删除一行或多行数据。然而,这并不是从表中删除数据的唯一方式。您可以使用T-SQL TRUNCATE TABLE语句来删除SQL Server表中的所有行。

DELETE语句是完全记录的操作。而TRUNCATE TABLE语句是最小记录的操作。这意味着TRUNCATE命令的性能稍好,并且事务日志中会添加较少的条目。您可以在下面的清单中看到使用TRUNCATE的示例。

TRUNCATE TABLE myLogins

这将删除myLogins表中的所有数据。

总结

在本教程中,您学习了如何使用T-SQL INSERT、UPDATE和DELETE语句向SQL Server表中添加、修改和删除行。在每种情况下,我都解释了如何处理单行值以及如何处理由子查询产生的多行数据。此外,您还了解了DELETE和TRUNCATE语句的区别,尽管它们都可以从表中删除行。

相关文章:

Source:
https://petri.com/sql-insert-update-delete-truncate/