删除数据

11.2.1 DELETE 语法
DELETE 语句用来从表中删除数据,其语法为:





各参数说明如下:

  • FROM
    此参数为可选选项,用于连接DELETE 关键字和要删除数据亩韵竺啤?
  • table_name
    指定要删除数据的表。
  • WITH (
  • view_name
    指定用于删除数据的视图。
  • rowset_function_limited
    行集合函数限制,即使用OPENQUERY() 或OPENROWSET() 函数。
  • FROM
  • WHERE
    指定限制数据删除的条件。如果不指定WHERE 子句,就会删除表中的所有数据。在 WHERE 子句中指定两种形式的删除操作。一种是搜索删,除即使用搜索条件来限定要删除的数据行:另一种是定位删除,即使用CURRENT OF 子句来指定一个游标,删除操作会在游标的当前位置产生。定位删除比搜索删除更精确。
  • GLOBAL
    说明要使用的游标是全局游标。如果不使用此选项,而又存在一个全局游标和一个局部游标同名的情况时,系统认为所选择的游标是局部游标。
  • cursor_name
    指定打开的游标名称。此游标必须是允许更新的。
  • cursor_variable_name
    指定游标变量的名称。此游标变量必须是允许更新的。
  • OPTION ( [,...n] )
    请参见第10 章“数据查询”中OPTION 子句中所讲述的参数。
  • table_hint
    表提示用于指定一个表的扫描计划,即将要用于查询优化器的一个或多个索引,或一个用于检索数据的锁定方法。此选项一般来说不必使用,查询优化器会自动选择一个最优的执行方案。各表提示之间应使用逗号隔开。
  • INDEX(index_val [,...n])
    指定索引提示,即当执行命令时由SQL Server 使用的索引的名称或ID 号。每个表只能指定一个索引提示。在表提示中最多可以指定250 非簇索引。
  • FASTFIRSTROW
    等价于OPTION (FAST 1) ,即对第一行返回数据采用查询优化。
  • HOLDLOCK
    一般情况下,当执行SELECT 命令时,SQL Server 会在选取数据的过程中对该数据所属的数据页设定一个共享锁(Shared Lock, 关于锁的介绍请参见本章后部分)。当SQL Server 读到下一个数据页的数据时,上一个数据页的共享锁就会被解除。但如果使用了 HOLDLOCK 选项,则在整个SELECT 命令执行的过程中设定的共享锁会一直存在。此选项不能在带FOR BROWSE 子句的SELECT 语句中使用。此选项等价于SERIALIZABLE 选项。
  • NOLOCK
    一般情况下,当执行SELECT 命令时,SQL Server 会在选取数据的过程中对该数据所属的数据页设定一个共享锁(Shared Lock, 关于锁的介绍请参见本章后部分)。但如果使用了NOLOCK 选项,则SQL Server 不会指定共享锁,而且不管其它用户是否正在更改所读取的数据,SELECT 命令仍然可以读取数据。因此,使用此选项可能会读取到其它用户尚未提交的数据。此选项等价于READUNCOMMITTED 选项。
  • PAGLOCK
    指定在SELECT 命令执行时使用对数据页做共享锁。这是SQL Server 的内定方式。
  • READCOMMITTED
    指定数据扫描执行时使用与运行在READ COMMITTED 孤立级上的事务相同的锁语义。即SELECT 命令不会返回尚未提交的数据。
  • READPAST
    跳过目前被锁定的行。此选项只用于在事务运行在READ COMMITTED 孤立级上的情况下。
  • READUNCOMMITTED
    此选项等价于NOLOCK 选项。
  • REPEATABLEREAD
    指定数据扫描执行时使用与运行在REPEATABLE READ 孤立级上的事务相同的锁语义。即用SELECT 命令读取的数据在整个命令执行过程中不会被更改。此选项会影响系统的效能,非必要情况最好不用此选项。
  • ROWLOCK
    指定使用共享的行数据锁,即使用行级别锁定。
  • SERIALIZABLE
    此选项等价于HOLDLOCK 选项。
  • TABLOCK
    指定用SELECT 命令读取数据时对所选取的表的全部数据做锁定,直到整个命令执行完毕。如果指定了HOLDLOCK 选项,则共享的表锁定会维持到事务结束。
  • TABLOCKX
    指定用SELECT 命令读取数据时对所选取的表的全部数据做锁定,直到整个命令或事务执行完毕。
  • UPDLOCK
    指定在SELECT 命令执行时使用更新锁(Update Lock),而不使用共享锁,并且此更新锁将维持到命令执行结束为止。如果省略WHERE子句,则表示删除表中的全部数据,但表的定义仍在数据库中,也就是说,DELETE子句删除的是表中的数据,而不是关于表的定义。 NOLOCK、READUNCOMMITIED或READPAST表提示不能用于作为插入、删除或更新操作对象的表。

    11.2.2 用DELETE 删除数据
    (1) 删除一条记录
    例11-5 删除编号为‘10031011 ’的员工记录
    use pangu
    delete from employee
    where emp_id = ’10031011’
    (2) 删除多条记录
    例11-6 删除所有的部门信息记录
    use pangu
    delete from department_info /* 或使用 delete department_info */
    这个例子删除了department_info 表中的所有数据使它成为空表
    (3) 带子查询的删除语句
    子查询同样可以嵌套在DELETE 语句中,用以构造执行删除操作的条件。
    例11-7: 删除后勤部所有员工的记录。
    use pangu
    delete from employee
    where dept_id =
    (select dept_id
    from department
    where d_name = ’后勤部’)
    例11-8 删除订货表前100 项记录中所有产品编号为1003002 的产品
    use pangu
    delete orders
    from (select top 100 * from orders) as orders_ top100
    where orders.p_id = orders_ top100.p_id

(4) 删除当前游标行数据
例11-9: 删除游标dinfo_cursor 所指定的数据行。
delete from department_info
where current of dinfo_cursor

11.2.3 TRUNCATE TABLE 命 令
如果要删除表中的所有数据,那么使用TRUNCATE TABLE 命令比用DELETE 命令快得多。因为DELETE 命令除了删除数据外,还会对所删除的数据在事务处理日志中作记录,以防止删除失败时可以使用事务处理日志来恢复数据;而TRUNCATE TABLE 则只做删除与表有关的所有数据页的操作。TRUNCATE TABLE 命令功能上相当于使用不带WHERE 子句的DELETE 命令。但是TRUNCATE TABLE 命令不能用于被别的表的外关键字依赖的表。
TRUNCATE TABLE 命令语法如下:
TRUNCATE TABLE table_name
注意:由于TRUNCATE TABLE命令不会对事务处理日志进行数据删除记录操作,因此不能激活触发器。
例11-10: 删除所有的部门信息记录。
use pangu
truncate table department_info

时间: 2024-10-28 11:57:12

删除数据的相关文章

h2 删数据 sql优化-h2数据库删除数据速度问题

问题描述 h2数据库删除数据速度问题 想删除h2数据库中某个表部分数据,但该表中有八千万左右数据,如何删除符合要求的一小部分数据呢?比如删除name以abc开头的数据,因为h2数据库我是通过web打开查看的,普通的Sql语句要执行很长很长时间,而且经常报内存不足,各位大神有没有什么优化的方法???求指点呀 解决方案 http://www.lc365.net/blog/b/32424/ 解决方案二: 因为没分了,不过谢谢能回答,对我其他的一些地方有帮助

数据文件坏删除数据文件

数据 没有简单的方法来删除表空间的数据文件,唯一的方法是删除整个定义的表空间,步骤有下面(前提是这个数据文件上的数据是不需要了): 如果数据库运行在非归档模式: 1. MOUNT数据库 - startup mount2. 删除数据文件 - alter database datafile xxx offline drop3. 打开(OPEN)数据库 - alter database open 4. 查看属于该表空间的所有对象:        select owner, segment_name,

如何有条件的分步删除数据表中的记录

数据|条件 如何有条件的分步删除数据表中的记录作者:eygle出处:http://blog.eygle.com日期:February 22, 2005« 自己动手,丰衣足食 | Blog首页 有时候我们需要分配删除数据表的一些记录,分批提交以减少对于Undo的使用,本文提供一个简单的存储过程用于实现该逻辑.你可以根据你的需要进行适当调整,本例仅供参考: SQL> create table test as select * from dba_objects;Table created.SQL>

用SQL删除数据

  使用[delete]命令可以删除数据,使用[truncate]命令可以删除整表数据但保留结构.4.7.1 删除记录    在[命令编辑区]输入"delete from scott.test where empno>=7500 and empno<=8000;",然后单击[执行]按钮,出现如图4.47所示的结果.    [参见光盘文件]:\第4章\4.7\471.sql.    删除记录的语法:delete from 数据表 where 条件.4.7.2 整表数据删除  

Oracle 9i删除数据表

   数据表的删除比较简单,表删除后其占用的空间就被系统释放和回收,表的删除是无法回滚的操作.可删除的内容包括.     表的定义 表中的数据     表中的索引 表中的约束条件     表上的触发器 表中的权限     在[企业管理器]里删除表    (1)如图7.35所示.    (2)出现如图7.36所示界面.    (3)对应上述删除数据表director的SQL代码为如下.    ―――――――――――――――――――――――――――――――――――――    DROP TABLE S

PHP批量删除数据的方法

PHP教程:研究批量删除数据的方法. SQL:$SQL="delete from `doing` where id in ('1,2,3,4')"; 数据用逗号隔开. 表单: <form action="?action=doing" method="post"> <input name="ID_Dele[]" type="checkbox" id="ID_Dele[]"

亲密接触ASP.Net(10) 增加修改删除数据

接上一节,我们这一节主要计论如何使用DataSet,在数据库中增加.修改.删除一个数据. 首先我们需要打开一个联结,我们的数据库还是用上一节的吧:) string MyConnString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:/test/test.mdb;";string strComm = "select * from UserList";ADOConnection MyConnection = n

使用简单的方法进行批量删除数据

数据 在网上看到一些批量删除数据的例子.但是大部分是用的数组来保存所选的id.这样比较麻烦,也不容易被理解.我就拿个比较简单的方法来实现这个功能.(只看红色的部分即可,而且还加个删除提示窗口) using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;u

ASP.net在gridview中删除数据时同时更新xml文件

asp.net|xml|数据 为了减少对数据库的访问,前台页面通常只对xml文件进行读取,但是更新数据库的时候需要同时更新xml文件,添加好办,但是删除的时候呢,下面的程序在gridview中删除数据的同时删除xml文件中对应的节点.xml文件的每个节点是一个图片新闻,包括图片和新闻页面的本地存储路径.   using System;using System.Collections;using System.ComponentModel;using System.Data;using Syste