首页 > 数据库 >SQL删除语句概述

SQL删除语句概述

时间:2023-06-19 16:34:44浏览次数:74  
标签:语句 删除 SQL 子句 表中 概述 使用


关于SQL Delete的这篇文章是关于SQL Server中关键语句,函数和操作的SQL必备系列的一部分。

要从表中删除行,请使用delete关键字通过数据操作语言(即DML语句)完成。到目前为止,SQL删除操作是所有DML命令中最简单的操作。在执行delete命令时,我们不必担心从表中获取任何形式的数据,我们不必担心使用从表中获取的任何数据。我们只是简单地告诉数据库删除一个特定的记录,它要么是,要么不是。就这么简单。

首先,让我们快速回顾一下SQL删除语句的样子。我们需要告诉数据库和表它应该删除数据的位置。添加条件子句以设置数据删除范围是个好主意。否则,它将删除表中的所有内容。

让我们看看我们的表并删除一些记录。

如何删除没有where子句的行

以下示例从AdventureWorks2014数据库中的表中删除Person.Person中所有行。使用WHERE子句对SQL删除语句没有强制实施限制。

使用Adventureworks2014;
DELETE  FROM [人] [人]。

如何删除Where子句的行

以下示例从AdventureWorks2014数据库中的[Person]。[Person]表中删除行,其中businessEntityID列中的值大于30,000

使用Adventureworks2014;走从 [人]中删除。[人]WHERE businessEntityID> 30000 ;

注意:可能发生的一个不幸的错误是意外地运行没有Where子句的SQL删除并且无意中删除了所有数据。为防止这种情况发生,请考虑使用ApexSQL Complete中的执行保护功能,在执行之前警告这些可能具有破坏性的操作。了解更多:执行警报

如何使用Top Where子句删除行

以下示例从AdventureWorks2014数据库中的Person.Person表中删除50个随机行。BusinessEntityID中的值必须介于30,000和40,000之间。

使用Adventureworks2014;走从 [人]中删除顶部(50)。[人]WHERE BusinessEntityID 介于 30000  和 40000 之间

注意:TOP(n)子句与SQL Delete语句和任何DML语句(即Select,Insert,Delete和Update)一起使用时,操作是在Top子句中指定的行数的随机选择上执行的。

如何删除重复行

在现实世界中,我们倾向于从不同来源收集数据; 拥有重复记录并不罕见。解决重复问题的一种方法是首先确定重复发生的位置。并对这些列运行选择查询。

EATE TABLE tb_spaceused(database_name NVARCHAR(128),database_size        VARCHAR(18),[未分配的空间] VARCHAR(18),保留             VARCHAR(18),data                 VARCHAR(18),index_size           VARCHAR(18),未使用的               VARCHAR(18));INSERT  INTO tb_spaceusedEXEC sp_msforeachdb@ command1 = “use?exec sp_spaceused @oneresultset = 1” ; 
 
 
选择 *FROM tb_spaceused按 database_name 排序以下示例使用PARTITION BY参数对tb_spaceused表的所有列分区查询结果集。Row_Number(),一个窗口函数,这意味着它在有序集上运行。OVER子句中指定的ORDER BY子句按整个列tb_spaceused表对每个分区中的行进行排序。
与CTEAS(选择 *,ROW_NUMBER()OVER(PARTITION BY database_name,database_size,[未分配的空间],保留,数据,index_size,没用过ORDER  BY database_name)AS Row_NumFROM tb_spaceused)选择 *来自 CTEWHERE ROW_NUM <> 1 ;

用Delete替换Select语句将删除表的所有重复项。

与CTEAS(选择 *,ROW_NUMBER()OVER(PARTITION BY database_name,database_size,[未分配的空间],保留,数据,index_size,没用过ORDER  BY database_name)AS Row_NumFROM tb_spaceused)- 选择 *--FROM CTE--WHERE Row_Num <> 1;从 CTE中删除WHERE ROW_NUM <> 1 ;

SQL删除语句概述_SQL

如何使用SQL子查询删除行

在以下示例中,将根据另一个表中的数据删除一个表中的行。在示例中,SalesPersonQuotaHistory表中的行将根据SalesPerson表的SalesYTD列删除。

DELETE  FROM Sales .SalesPersonQuotaHistoryWHERE BusinessEntityID IN(SELECT BusinessEntityID来自销售.SalesPerson在哪里 SalesYTD> 4900000.00);走

如何使用SQL连接删除行

在本节中,我们将使用SQL Delete语句从Adeventureworks2014数据库中删除数据。乍看之下删除数据听起来很琐碎,但是一旦我们进入大型数据库设计,事情可能就不再那么容易了。

在许多情况下,表通过主键和外键关系相关。在以下示例中,我们可以看到使用连接从Sales.SalesPersonQuotaHistory中删除数据

DELETE sqFROM Sales .SalesPersonQuotaHistory sqINNER JOIN Sales .SalesPerson sp ON sq .BusinessEntityID = sp .BusinessEntityIDWHERE sp .SalesYTD > 4500000.00 ;走

如何使用链接服务器和OpenQuery从远程表中删除行

以下示例使用SQL delete语句使用名为hqdbt01的链接服务器从远程表中删除行。然后使用四部分对象命名约定查询远程表以从远程表中删除行。

删除
FROM [hqdbt01] .AdventureWorks 2014。[人力资源]。[SHIFT]
在哪里 ShiftID = 2 ;

以下示例通过指定OPENQUERY行集函数和delete命令来查询远程表。

删除 OPENQUERY(hqdbt01,'SELECT *
来自AdventureWorks2014.HumanResources.Department
在哪里DepartmentID = 18');

如何使用SSMS删除行

使用SQL Server Management Studio(SSMS),删除行的图形用户界面(GUI)涉及手动搜索。实际上,使用SQL查询删除记录会更容易,更快捷。

让我们继续并找到表以使用SQL删除语句,在这种情况下,选择表dbo.cities。现在,右键单击并选择“ 编辑前200行”。此选项将打开查询设计器窗口。接下来,右键单击该窗口并选择Execute SQL并编写一个新查询,该查询将删除dbo.cities表中的行。

SQL删除语句概述_删除行_02

在结果窗格中,确保SELECT语句在开始删除行之前提取正确的目标记录。选择行并右键单击行,然后选择“ 删除”以从表中删除行。

SQL删除语句概述_删除行_03

摘要

到目前为止,我们已经看到许多不同的方法使用SQL delete语句来删除数据。但是,有一个使用delete语句时要遵循的注意事项列表,如下所示:

  1. 在删除任何内容之前,始终建议先使用SELECT语句,以确保定位正确的记录。因此,delete语句用于使用where子句从表中删除行,以仅选择要删除的行。
  2. 始终使用唯一标识符来查找需要删除的行。
  3. 要删除表中的所有行,请始终使用TRUNCATE TABLE。TRUNCATE TABLE比SQL删除语句更快,并且它使用更少的系统和事务日志资源。
  4. 默认情况下,DELETE语句会在表上引发独占(X)锁定,并在事务完成之前保持锁定。
  5. 独占锁可防止其他事务修改数据; 使用NOLOCK提示或读取未提交的隔离级别允许读取操作。
  6. 建议在delete语句中指定TABLOCK提示。此过程允许页面取消分配和相关空间可供数据库中的其他对象重用。
  7. 在执行delete语句之前,最好在堆表上创建聚簇索引。
  8. 虽然非常简单且非常强大,但Delete语句的结果具有破坏性。删除的行无法轻松恢复。

注意:要恢复已删除的行,请参阅SQL Server灾难恢复 - 如何快速恢复因Inadvertent删除操作而丢失的数据

目前为止就这样了。希望您喜欢在SQL删除语句中阅读本文。如果您有任何疑问,请随时在下面发表评论。

标签:语句,删除,SQL,子句,表中,概述,使用
From: https://blog.51cto.com/u_16145034/6515617

相关文章

  • POSTGRESQL NEON - Serverless 式的POSTGRESQL 数据库的独特技能 分支数据
    之前没有关注过SERVERLESS的数据库产品之前,我很少会关注SERVERLESS的东西,因为一直在实体机数据库类型打拼的我,从来不关心什么 云原生什么SERVERLESS,Idon'tcareaboutthat,it'snotmybusiness!!!!但是后来上云了,上的很深,没法了,开始关注什么是云原生,什么是POALRDB 最......
  • MYSQL MHA VS GTID 与 BINLOG SERVER
    勘误,昨天有一位海外friend指出昨天文中postgresql bloom中的第四步截图是并行扫描,而没有用到bloom索引,这里抱歉,经查实截图错误,下面是重新的截图,同时另一幅截图也有问题建立索引时缺少USINGbloom,感谢您。另也希望大家发现可以发现我的错误,并及时指出,让我们大家可以成长的......
  • pgsql 自动备份和恢复
    window自动备份@echooffSETPGPASSWORD=postgresSETtimestamp=%Date:~0,4%%Date:~5,2%%Date:~8,2%%Date:~8,2%%Time:~3,2%SETbackup_dir=D:/postgres/%timestamp%echo%backup_dir%"C:/ProgramFiles/PostgreSQL/15/bin/pg_dump.exe"-Upostgres-hlocalhos......
  • PostgreSql通过创建外部表而非dblink使访问速度提高,优化sql查询速度
    resourceregister库外部表创建--导入插件createextensionpostgres_fdw;--创建服务名称为operation的服务host为ipport为端口dbname为数据库名称createserveroperationforeigndatawrapperpostgres_fdwoptions(host'localhost',port'5432',dbname'operat......
  • MySQL 大表的清理
    一、事件背景一个大表里面存储有数据28亿,大表结构是hash100个分区,占用空间1.8T,里面保留了2年多的数据,数据文件大小持续在增大,目前MySQL数据目录datadir占用磁盘95%,无法通过drop分区回收空间,计划保留最新3个月数据。二、实施步骤在凌晨业务低峰期执行1.新增同结构新表注意:create......
  • MySQL 数据库管理与优化技巧
    使用索引优化查询性能:索引是提高查询性能的关键因素之一。合理地创建索引可以加快查询速度。在设计数据库时,根据经常使用的查询条件和频率,选择合适的列创建索引,同时避免过多的索引,以避免索引维护的开销。优化数据库结构:通过合理的数据库设计,可以提高数据库的性能和可扩展性......
  • mysql匹配正则替换url字符串
    替换http://a.com/a/b/c/ss/s.mp3为  /a/b/c/ss/s.mp3类似上面可以使用  '^((https|http)?://)?[[:alnum:].-]+\/' selectREGEXP_REPLACE('https://pbx-bj-tx07.7moor.com/dds/ee/c/aa.mp3','^((https|http)?://)?[[:alnum:].-]+\/','/�......
  • v$session 会话相关SQL
    v$session常用字段如下SIDSERIAL#SPIDSQL_IDSTATUSROW_WAIT_OBJ#BLOCKING_SESSION_STATUS由上图可以看到持锁的sid为80,Blockingsessionstatus:*VALID状态valid为正在等待*NOHOLDER*GLOBAL*NOTINWAIT*UNKNOWN查看当前用户的sid和serial#selectsid,serial#,......
  • mysql索引优化-收藏
    原文章:https://www.cnblogs.com/eryuan/p/17488732.htmlhttps://www.cnblogs.com/eryuan/p/17430377.html in/or到底能不能用索引参数range_optimizer_max_mem_size要控制范围优化器可用的内存,使用range_optimizer_max_mem_size系统变量:值为0表示“没有限制”。当值......
  • Error creating bean with name 'sqlSessionFactory' defined in class path resource
    项目启动报错原因分析背景:system模块一个月未重启过,今天重启报数据源问题原因:这里报错的原因是数据源配置问题解决:数据源配置在nacos中,拿该模块的nacos数据源配置与项目启动成功的模块的数据源配置进行对比,检查出不同,改为一样即可......