e******r 发帖数: 220 | 1 我想把所有数据从一个table里去掉, 先试了truncate,没成功(说是referenced
by foreign key); 用delete就成了.
什么原因啊? 在这个例子里, 用delete 会不会破坏数据库的结构?
谢谢 | c*****d 发帖数: 6045 | 2 不管delete还是truncate,都不会破坏数据库的结构
delete是dml,可以rollback
truncate是ddl,不可以rollback | c*****d 发帖数: 6045 | 3 truncate table操作oracle要检查是否存在ref关系
如果有B表fk ref到你要truncate的表A,即便B表里实际没有数据,truncate A操作也不
能成功
delete就不同了,如果没有对应的数据,delete A操作可以
【在 e******r 的大作中提到】 : 我想把所有数据从一个table里去掉, 先试了truncate,没成功(说是referenced : by foreign key); 用delete就成了. : 什么原因啊? 在这个例子里, 用delete 会不会破坏数据库的结构? : 谢谢
| j***a 发帖数: 10844 | 4 And truncate will release the storage space. Delete won't. | B*****g 发帖数: 34098 | 5 disable ref,呵呵。
【在 c*****d 的大作中提到】 : truncate table操作oracle要检查是否存在ref关系 : 如果有B表fk ref到你要truncate的表A,即便B表里实际没有数据,truncate A操作也不 : 能成功 : delete就不同了,如果没有对应的数据,delete A操作可以
| c*****d 发帖数: 6045 | 6 对,如果想truncate table A成功
必须alter table B disable constraint FK_NAME
然后就可以truncate A了
也不
【在 B*****g 的大作中提到】 : disable ref,呵呵。
| n********6 发帖数: 1511 | 7 补充题外问题:
在sql server里面,如果在stored procedure里面用truncate,job agent run需要非
常高的权限。为什么呢?因为truncate是DDL吗?
结果是:很多都用delete,尽管有些数据可能不需要写入log file。 |
|