精华内容
下载资源
问答
  • (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。 TRUNCATE TABLE 则次性地从表中删除所有的数据并不把单独的删除操作记录记入日志...

    参考链接:https://www.cnblogs.com/zhizhao/p/7825469.html

    (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

    TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

    (2)表和索引所占空间。

    当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,

    DELETE操作不会减少表或索引所占用的空间。

    drop语句将表所占用的空间全释放掉。

    (3)一般而言,drop > truncate > delete

    (4)应用范围。

    TRUNCATE 只能对TABLE;         DELETE可以是table和view
    

    (5)TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。

    (6)truncate与不带where的delete :只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。

    (7)delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。

    (8)truncate、drop是DLL(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚

    (9)在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或老师想触发trigger,还是用delete。

    (10) Truncate table 表名 速度快,而且效率高,因为:
    truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

    (11) TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

    (12) 对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。

    delete

    • delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。
    • delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。
    • delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。

    truncate

    • truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。
    • truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse
      storage,。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。
    • 对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。
    • truncatetable不能用于参与了索引视图的表。

    drop

    • drop是DDL,会隐式提交,所以,不能回滚,不会触发触发器。
    • drop语句删除表结构及所有数据,并将表所占用的空间全部释放。
    • drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。

    总结:

    1、在速度上,一般来说,drop> truncate > delete。

    2、在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

    3、如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;

    如果想删除表,当然用drop;

    如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;

    如果和事务有关,或者想触发trigger,还是用delete;

    如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

    展开全文
  • Oraclet的触发器

    2011-06-04 21:58:17
    但是我们可以创建INSTEAD_OF触发器来为 DELETE 操作执行所需的处理,即删除EMP表中所有基准: CREATE OR REPLACE TRIGGER emp_view_delete INSTEAD OF DELETE ON emp_view FOR EACH ROW BEGIN DELETE FROM emp ...
  • SQL培训第

    2018-03-14 15:04:04
    在另一个表中没有匹配时,则另一个表的选择列表列包含空值;如果表之间有匹配,则整个结果集行包含基表的数据值。 1.6.4.2 语法 select A.*, B.* from student_A A full outer join student_B B on A.Uuid...
  • 初识MySQL(8)使用触发器

    千次阅读 2020-01-27 12:23:10
    当一个SQL语句执行之后,我们可能会需要一些事情自动发生: (1)每当增加一个顾客到数据库的时候,检查其电话号码格式是否正确; (2)每当订购一个产品时,从库存数量减去订购的数量; (3)无论何时...

    1.触发器的作用

    当一个SQL语句被执行之后,我们可能会需要一些事情自动发生:
    (1)每当增加一个顾客到数据库表的时候,都检查其电话号码格式是否正确;
    (2)每当订购一个产品时,都从库存数量中减去订购的数量;
    (3)无论何时删除一行,都在某个存档表中保留一个副本。

    所有例子的共同之处是他们都需要在某个表发生变动的时候自动处理一些事情,这就是触发器。
    触发器支持DELETE,INSERT,UPDATE语句,其他语句不支持触发器。

    2.创建触发器

    在我们创建一个触发器的时候,我们需要给出一下4个信息:
    (1)唯一的触发器名
    (2)触发器关联的表
    (3)触发器应该响应的活动(DELETE,UPDATE,INSERT)
    (4)触发器何时执行(处理前或处理后)

    创建触发器的一个例子:

    CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added';
    

    以上创建触发器的例子,表明了这是一个针对表products的触发器,并且响应的活动是INSERT操作,并在操作处理之后启动触发器,而FOR EACH ROW SELECT 'Product added’指的就是在每一行的插入操作之后文本’Product added’均会被显示。
    注意,只有表支持触发器,视图并不支持触发器!

    3.删除触发器

    DROP TRIGGER newproduct;
    

    4.使用触发器

    INSER触发器:
    在使用INSERT触发器的时候,我们引入一个新的概念,就是一个名为NEW的虚拟表,来表示插入完成之后的新表,然后用NEW来访问被插入的行。
    NEW表中的值可以被更新。

    CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num;
    

    此代码创建了一个名为neworder的触发器,他按照AFTER INSERT在order表上运行。在插入了一个新的行之后,生成一个新的订单号并保存到order_num中。触发器从NEW.order_num取得这个值并返回他。

    DELETE触发器
    在使用DELETE触发器的时候,相对应的也有一个OLD的虚拟表,来表示删除之前的旧表,然后用OLD来访问被删除的行。
    OLD表中的值是只读的,不可以被更新。

    CREATE TRIGGER deleteorder BEFORE DELETE ON orders FOR EACH ROW
    BEGIN
    	INSERT INTO archive_orders(order_num,order_date,cust_id)
    	VALUES(OLD.order_num,OLD.order_date,OLD.cust_id);
    END;
    

    此语句的作用是在任意删除语句触发前,使用一个INSERT语句将删除的那一行保存在一个名为archive_orders的表中。
    上面例子使用了BEGIN/END结构,用于在触发器有多条SQL语句时容纳,使得代码整体的结构比较清晰明确,不过在上述例子中其实并不是必要的。

    UPDATE触发器
    同理,UPDATE可以对操作前和操作后的表都进行操作,因此NEW和OLD都可以在UPDATE触发器中使用。使用道理与上面的两种情况相同。

    CREATE TRIGGER updateevendor BEFORE UPDATE ON vendors
    FOR EACH ROW SET NEW.vend_state = Upper(NEW.vend_state);
    

    以上语句实现的功能就是在每一次进行更新的行的vend_state值都转化为大写的值。

    展开全文
  • 如果你运行OldCmp时只加了-report选项,它会搜索你默认域中所有计算机密码老化日期大于90天的计算机对象,并且把结果生成为一个HTML报告。如果你的域非常大,并且里面有很多计算机账号,这条命令可能得花上一段时间...
  • sql经典语句部分

    2011-07-31 11:16:50
    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...
  • 说明 : 指定在一个共享服务器环境可同时运行的共享服务器进程的最大数量。 值范围: 根据操作系统而定。 默认值 : 20 dispatchers: 说明 : 为设置使用共享服务器的共享环境而设置调度程序的数量和类型。可以为该...
  • 入门学习Linux常用必会60命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    虚拟控制台最有用的是,当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作,关闭这个程序。 shutdown 1.作用 shutdown命令的作用是关闭计算机,它的使用权限是超级用户。 2.格式 shutdown [-h][-i...
  • 8.5.2 例1:从前一行中返回一个值 203 8.5.3 理解数据的位移 204 8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用...
  • 8.5.2 例1:从前一行中返回一个值 203 8.5.3 理解数据的位移 204 8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用...
  • 如下10左右代码就足够遍历一个对象了: <pre><code>javascript function touch (obj) { if (typeof obj === 'object') if (Array.isArray(obj)) { for (let i = 0,l = obj....
  • SQL语法大全

    2014-03-30 11:00:11
    Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。 ActiveConnection Recordset对象可以通过...
  • 在Eclipse使用Jocky也非常简单,任何一个Java工程,选中工程通过右键菜单,可以出现Jocky的快捷菜单: 在Eclipse的右键菜单> 在Eclipse的属性设置> 事实上,在Eclipse使用Jocky时,Jocky也是...
  • sqlserver触发器例子

    2011-09-01 16:04:39
    一个表或视图的每一个修改动作(insert,update和delete)可以有一个instead of 触发器﹐一个表的每个修改动作可以有多个After触发器。 四﹕触发器的执行过程 如果一个Insert﹑update或者delete语句违反了约束﹐...
  • oracle实验报告

    2019-01-10 19:29:58
    另外,还可以复制一个表的部分列定义或部分列定义及其数据。 三、 Oracle数据库数据查询 1、单表查询 2、多表查询 四、 SQL*PLUS常用命令 表1 常用报表格式化名命令 命令 定义 Btitle 为报表的每一页设置底端标题 ...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    而表级约束的定义独立于列的定义,它可以应用于一个表中的多个列。 13.填写下面的语句,使其可以为Class表的ID列添加一个名为PK_CLASS_ID的主键约束。 ALTER TABLE Class Add ____________ PK_LASS_ID (Constraint...
  •  UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复而派生出一个结果表。 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复。两种情况下,派生表的每一不是来自 TABLE1...
  • MySQL命令大全

    2018-01-15 11:19:17
    2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql 3.导出一个数据库结构 mysqldump -u wcnc -p -d –add-drop-table smgp_apps_...
  • 3.4.3 在浏览器输入一个url后回车,后台发生了什么?比如输入url后,你看到了百度的首页,那么这一切是如何发生的呢? 3.4.4 判断两棵树是否相等,请实现两棵树是否相等的比较,相等返回1,否则返回其他值,并...
  • 外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 主表的记录从表参照时,主表的记录将不...
  • navicat for postgresql 64位 破解版

    热门讨论 2017-12-13 10:00:27
    插入:每当一个插入,触发器会激活。 更新:每当修改一个行,触发器会激活。 删除:每当从删除一个行,触发器会激活。 TRUNCATE:触发器定义为触发 TRUNCATE。 更新栏位:指定一个列列表。如果至少...
  • 日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...
  • MYSQL常用命令大全

    2011-05-30 13:31:24
    2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql 3.导出一个数据库结构 mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >...
  • 例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;成绩可为整型或实型。 显然不能用一个数组来存放这一组数据。 因为数组中各元素的类型和长度必须一致,以便于编译...
  • 2)修改了其中一个表中的部分数据,此时用Log explorer看日志,可以作日志恢复 3)然后恢复备份,(注意:恢复是断开log explorer与数据库的连接,或连接到其他数据上, 否则会出现数据库正在使用无法恢复) 恢复完后,...
  • 在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本...
  • sql总结.doc

    2019-08-27 22:08:51
    尽管游标能遍历结果所有行,但他一次只指向一行。 (2)游标的作用 游标的一个常见用途就是保存查询结果,以便以后使用。 (3)游标的分类 游标分为显示游标和隐式游标 隐式游标:是用户操作SQL时自动生成的,而...
  • excel的使用

    2012-11-25 17:06:01
    图2(8) 利用Ctrl+*选取文本如果一个工作表中有很多数据表格时,可以通过选定表格中某个单元格,然后按下Ctrl+*键可选定整个表格。Ctrl+*选定的区域为:根据选定单元格向四周辐射所涉及到的有数据单元格的最大...
  • codev界面图解

    2018-08-15 14:17:47
    公差是一个标准缺省组,与一个单补偿元(像面的Z向移动,例如调焦)一起用在逆灵敏度模式。滚动输出视窗文本列表就可以查看输出结果。由于马上你就要亲自完成一次类似的运行,所以,我们就不再对该具体输出...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 123
精华内容 49
关键字:

当一个表中所有行都被delete