日期:2011-05-02 15:21:00 来源:本站整理
SQL Server数据库技术(63)[MSSQL防范]
本文“SQL Server数据库技术(63)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
11.2.1 DELETE 语法
DELETE 语句用来从表中删除数据,其语法为:
各参数阐明以下:
- FROM
此参数为可选选项,用于衔接DELETE 关键字和要删除数据的对象名称. - table_name
指定要删除数据的表. - WITH (
[...n])
指定一个或多个目标表答应的表提醒.- view_name
指定用于删除数据的视图.- rowset_function_limited
行调集函数限制,即便用OPENQUERY() 或OPENROWSET() 函数.- FROM
指定一个额外的FROM 子句.这是DELETE 号令在Transact-SQL 语言中的扩大,它答应同时删除多个表中的数据.其所含的参数包含join_table、 join_type 等,与第10 章"数据查询"中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),而不利用同享锁,并且此更新锁将保持到号令履行完毕为止. - view_name
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
假如要删除表中的全部数据,那么利用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
以上是“SQL Server数据库技术(63)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论