MYSQL网站制作之TRUNCATE 疾速删除表中的一切数据
MySQL的低成本来自于其简单性吗?它的普及性是由于其低成本吗?其实,在MySQL的最“好”与最“不好”的功能之间没有明显的分界线,但它们组合在一起就形成了一副让我们欣赏的作品。备注与DELETE语句比拟,TRUNCATETABLE具有以下长处:
所用的事件日记空间较少。
DELETE语句每次删除一行,并在事件日记中为所删除的每行纪录一个条目。TRUNCATETABLE经由过程开释用于存储表数据的数据页来删除数据,而且在事件日记中只纪录页开释。
利用的锁一般较少。
当利用行锁实行DELETE语句时,将锁定表中各行以便删除。TRUNCATETABLE一直锁定表和页,而不是锁定各行。
表中将毫无破例地不留下任何页。
实行DELETE语句后,表仍会包括空页。比方,必需最少利用一个排他(LCK_M_X)表锁,才干开释堆中的空表。假如实行删除操纵时没有利用表锁,表(堆)中将包括很多空页。关于索引,删除操纵会留下一些空页,只管这些页会经由过程背景扫除历程敏捷开释。
TRUNCATETABLE删除表中的一切行,但表布局及其列、束缚、索引等坚持稳定。若要删除表界说及其数据,请利用DROPTABLE语句。
假如表包括标识列,该列的计数重视置为该列界说的种子值。假如不决义种子,则利用默许值1。若要保存标识计数器,请利用DELETE。
限定
不克不及对以下表利用TRUNCATETABLE:
由FOREIGNKEY束缚援用的表。
介入索引视图的表。
经由过程利用事件复制或兼并复制公布的表。
关于具有以上一个或多个特性的表,请利用DELETE语句。
TRUNCATETABLE不克不及激活触发器,由于该操纵不纪录各个行删除。有关具体信息,请参阅CREATETRIGGER(Transact-SQL)。有的时候,一些缺失的功能可以通过别的办法来实现,例如,在MySQL4.1以前,你可以通过使用join方法来替代子查询的功能。在MySQL5.0中,大多数关系型数据库所要求的功能已经都具备。 记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。 还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。 其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。 XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!) 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。 SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。 你可以简单地认为适合的就是好,不适合就是不好。
页:
[1]