关于外键的一点疑问!

LYNX2222 2003-09-25 12:09:17
有两个表:A(Aid,aaa,bbb) B(Bid,Aid,ccc)
其中A.Aid和B.Aid是主外键关系,A.Aid,B.Bid是主键
两表都有数据,现在想删除数据
第一步:truncate table B(成功执行)
第二步:truncate table A(报外键错误)但使用delete from A不报错

问一下为什么?truncate table A 和 delete from A
除了是否写日之外还有什么区别?


...全文
39 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aierong 2003-09-25
  • 打赏
  • 举报
回复


对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
LYNX2222 2003-09-25
  • 打赏
  • 举报
回复
在截断包含被引用外键的表之前,必须使其他表中所以引用外键无效


什么意思?
怎么使其他表中所以引用外键无效?
LYNX2222 2003-09-25
  • 打赏
  • 举报
回复
在截断包含被引用外键的表之前,必须使


什么意思?
怎么使其他表中所以引用外键无效?
LYNX2222 2003-09-25
  • 打赏
  • 举报
回复
执行完第一步后
用delete from A是可以的
为什么不能用truncate table A(报外键错误)
lionstar 2003-09-25
  • 打赏
  • 举报
回复
Truncate 命令是一个DDL语句,不生成回滚日志信息,不启动表上关联的触发器。该命令比Delete命令更快速、高效的删除表中全部数据。它不影响表相关的任何结构(约束和触发器)或权限。
在截断包含被引用外键的表之前,必须使其他表中所以引用外键无效。
LYNX2222 2003-09-25
  • 打赏
  • 举报
回复
第一步:truncate table B(成功执行)
外键表里面已经没有数据了啊?

aierong 2003-09-25
  • 打赏
  • 举报
回复
外键约束,报错误
LYNX2222 2003-09-25
  • 打赏
  • 举报
回复
第一步:truncate table B(成功执行)
sdhdy 2003-09-25
  • 打赏
  • 举报
回复
这是因为有外键约束,所以truncate table A出错!
伍子V5 2003-09-25
  • 打赏
  • 举报
回复
不对吧,如果B中有数据的话
delete from A也应该报错的


TRUNCATE TABLE
删除表中的所有行,而不记录单个行删除操作。

语法
TRUNCATE TABLE name

参数
name

是要截断的表的名称或要删除其全部行的表的名称。

注释
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

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

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

TRUNCATE TABLE 不能用于参与了索引视图的表。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧