删除数据----DELETE AND TRUNCATE TABLE

来源:互联网 发布:从哪里招聘美工 编辑:程序博客网 时间:2024/05/16 09:05

简介

DELETE 语句也会影响到表中的一行或多行数据, 这依赖于WHERE 谓词当中行的选择标准。

语法如下:

DELETE FROM table_name

WHERE row_selection_predicate

注意:

DELETE 是一种具有潜在风险的操作。如果DELETE 语句中没有WHERE 子句(即DELETE FROM table_name),

将会删除表中的所有行。这个被删除数据的空表仍然会保存在数据当中。

删除与引用完整性

请看 DELETE FROM sale.
当sale表中包含了另一个表作为外键的引用(即volum 表当中的sale_id)。同时,它本身也有一个外键(customer_numb, 它所
引用的是customer 表中的主键),可以删除那些包含外键的行,而不会对数据库的其他部分造成任何影响。
但是,当试图删除那些被外键所引用的行时,会发生什么情况呢?

实际所发生的情况依赖于当包含主键的表被引用时所创建的具体选项,如下:
  1. SET NULL, 所有引用被删除主键行的外键值都会被设置成NULL。这是一种希望作为特殊例外的一种选项。不过,当外键作为其自身所在表主键的一部分时, 是不允许空值出现的。
  2. SET DEFAULT, 所有引用被删除主键行的外键值都会被设置成一个默认值。很显然,这是一种不合理的解决方案,因为不希望去设置一个通用的sale_id.
  3. CASCADE(级联,层叠,串联), 当主键被删除时,所有引用它的外键的数据行,也同时会被删除。这是绝对不希望看到的。
  4. NO ACTION. 如果有其他外键行引用该主键行,则不允许记录被删除。

TRUNCATE TABLE

语法: TRUNCATE table_name
使用该命令与没有WHERE 子句的DELETE 语句一样,表结构和以前一样保持不变,并且一致保存在数据字典中。
使用该命令有一些限制:
  1. 不能用在有外键引用的表上。
  2. 不能用在索引视图所基于的表上。
  3. 不能用于去激活触发器。

DELETE 与 TRUNCATE 的区别

DELETE 每次删除数据行,同时在数据库日志文件中为每行数据都写入一项条目。
相反,TRUNCATE TABLE 将会释放数据库文件的空间,使得之前被截断的表的数据行所占用的空间能被其他对象所使用。

0 0
原创粉丝点击