老尸 发表于 2015-1-16 22:19:36

MSSQL教程之删除数据

在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。11.2.1DELETE语法
DELETE语句用来从表中删除数据,其语法为:





各参数申明以下:<P>

[*]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子句中指定两种情势的删除操纵。一种是搜刮删,除即便用搜刮前提来限制要删除的数据行:另外一种是定位删除,即便用CURRENTOF子句来指定一个游标,删除操纵会在游标确当前地位发生。定位删除比搜刮删除更准确。
[*]GLOBAL
申明要利用的游标是全局游标。假如不利用此选项,而又存在一个全局游标和一个部分游标同名的情形时,体系以为所选择的游标是部分游标。
[*]cursor_name
指定翻开的游标称号。此游标必需是同意更新的。
[*]cursor_variable_name
指定游标变量的称号。此游标变量必需是同意更新的。
[*]OPTION([,...n])
请拜见第10章“数据查询”中OPTION子句中所报告的参数。
[*]table_hint
表提醒用于指定一个表的扫描企图,行将要用于查询优化器的一个或多个索引,或一个用于检索数据的锁定办法。此选项一样平常来讲不用利用,查询优化器会主动选择一个最优的实行计划。各表提醒之间应利用逗号离隔。
[*]INDEX(index_val[,...n])
指定索引提醒,即当实行命令时由SQLServer利用的索引的称号或ID号。每一个表只能指定一个索引提醒。在表提醒中最多能够指定250非簇索引。
[*]FASTFIRSTROW
等价于OPTION(FAST1),即对第一行前往数据接纳查询优化。
[*]HOLDLOCK
一样平常情形下,当实行SELECT命令时,SQLServer会在拔取数据的过程当中对该数据所属的数据页设定一个共享锁(SharedLock,关于锁的先容请拜见本章后部分)。当SQLServer读到下一个数据页的数据时,上一个数据页的共享锁就会被排除。但假如利用了HOLDLOCK选项,则在全部SELECT命令实行的过程当中设定的共享锁会一向存在。此选项不克不及在带FORBROWSE子句的SELECT语句中利用。此选项等价于SERIALIZABLE选项。
[*]NOLOCK
一样平常情形下,当实行SELECT命令时,SQLServer会在拔取数据的过程当中对该数据所属的数据页设定一个共享锁(SharedLock,关于锁的先容请拜见本章后部分)。但假如利用了NOLOCK选项,则SQLServer不会指定共享锁,并且不论别的用户是不是正在变动所读取的数据,SELECT命令仍旧能够读取数据。因而,利用此选项大概会读取到别的用户还没有提交的数据。此选项等价于READUNCOMMITTED选项。
[*]PAGLOCK
指定在SELECT命令实行时利用对数据页做共享锁。这是SQLServer的内定体例。
[*]READCOMMITTED
指定命据扫描实行时利用与运转在READCOMMITTED伶仃级上的事件不异的锁语义。即SELECT命令不会前往还没有提交的数据。
[*]READPAST
跳过今朝被锁定的行。此选项只用于在事件运转在READCOMMITTED伶仃级上的情形下。
[*]READUNCOMMITTED
此选项等价于NOLOCK选项。
[*]REPEATABLEREAD
指定命据扫描实行时利用与运转在REPEATABLEREAD伶仃级上的事件不异的锁语义。即用SELECT命令读取的数据在全部命令实行过程当中不会被变动。此选项会影响体系的效能,非需要情形最好不必此选项。
[*]ROWLOCK
指定利用共享的行数据锁,即便用行级别锁定。
[*]SERIALIZABLE
此选项等价于HOLDLOCK选项。
[*]TABLOCK
指定用SELECT命令读取数据时对所拔取的表的全体数据做锁定,直到全部命令实行终了。假如指定了HOLDLOCK选项,则共享的表锁定会保持到事件停止。
[*]TABLOCKX
指定用SELECT命令读取数据时对所拔取的表的全体数据做锁定,直到全部命令或事件实行终了。
[*]UPDLOCK
指定在SELECT命令实行时利用更新锁(UpdateLock),而不利用共享锁,而且此更新锁将保持到命令实行停止为止。
假如省略WHERE子句,则暗示删除表中的全体数据,但表的界说仍在数据库中,也就是说,DELETE子句删除的是表中的数据,而不是关于表的界说。NOLOCK、READUNCOMMITIED或READPAST表提醒不克不及用于作为拔出、删除或更新操纵工具的表。

11.2.2用DELETE删除数据
(1)删除一笔记录
例11-5删除编号为‘10031011’的员工纪录
usepangu
deletefromemployee
whereemp_id=’10031011’
(2)删除多笔记录
例11-6删除一切的部门信息纪录
usepangu
deletefromdepartment_info/*或利用deletedepartment_info*/
这个例子删除department_info表中的一切数据使它成为空表
(3)带子查询的删除语句
子查询一样能够嵌套在DELETE语句中,用以机关实行删除操纵的前提。
例11-7:删除后勤部一切员工的纪录。
usepangu
deletefromemployee
wheredept_id=
(selectdept_id
fromdepartment
whered_name=’后勤部’)
例11-8删除定货表前100项纪录中一切产物编号为1003002的产物
usepangu
deleteorders
from(selecttop100*fromorders)asorders_top100
whereorders.p_id=orders_top100.p_id(4)删除以后游标行数据
例11-9:删除游标dinfo_cursor所指定的数据行。
deletefromdepartment_info
wherecurrentofdinfo_cursor
11.2.3TRUNCATETABLE命令
假如要删除表中的一切数据,那末利用TRUNCATETABLE命令比用DELETE命令快很多。由于DELETE命令除删除数据外,还会对所删除的数据在事件处置日记中作纪录,以避免删除失利时可使用事件处置日记来恢单数据;而TRUNCATETABLE则只做删除与表有关的一切数据页的操纵。TRUNCATETABLE命令功效上相称于利用不带WHERE子句的DELETE命令。可是TRUNCATETABLE命令不克不及用于被其余表的外关头字依附的表。
TRUNCATETABLE命令语法以下:
TRUNCATETABLEtable_name
注重:因为TRUNCATETABLE命令不会对事件处置日记举行数据删除纪录操纵,因而不克不及激活触发器。
例11-10:删除一切的部门信息纪录。
usepangu
truncatetabledepartment_info
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKEabc%‘,MySQL将使用索引;如果查询条件是LIKE%abc’,MySQL将不使用索引。

简单生活 发表于 2015-1-19 08:42:38

SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.

乐观 发表于 2015-1-28 05:52:34

SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。

飘灵儿 发表于 2015-2-5 18:05:31

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

小魔女 发表于 2015-2-13 05:30:22

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

飘飘悠悠 发表于 2015-3-3 15:38:40

分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。

山那边是海 发表于 2015-3-11 12:06:25

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

再现理想 发表于 2015-3-18 16:03:39

索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。

深爱那片海 发表于 2015-3-26 12:20:40

一个是把SQL语句写到客户端,可以使用DataSet进行加工;
页: [1]
查看完整版本: MSSQL教程之删除数据