我想知道SQL中truncate和cascade之间的确切区别。
答案 0 :(得分:1)
级联参照完整性约束允许您定义当用户尝试删除或更新现有外键所指向的键时应发生的操作。
常见的行动
无操作:这是默认行为。 No Action指定如果尝试使用其他表中现有行中的外键引用的键删除或更新行,则会引发错误并回滚DELETE或UPDATE。
Cascade:指定如果尝试使用其他表中现有行中的外键引用的键删除或更新行,则还会删除或更新包含这些外键的所有行。
Set NULL:指定如果尝试使用其他表中现有行中的外键引用的键删除或更新行,则包含这些外键的所有行都将设置为NULL。
Set Default:指定如果尝试使用其他表中现有行中的外键引用的键删除或更新行,则包含这些外键的所有行都将设置为默认值。
<强>截断:: 强> TRUNCATE通常会从表中删除所有行,与DELETE不同,它不能回滚。
答案 1 :(得分:1)
Trmpate在逻辑上等同于DELETE FROM Table;
,因为它删除了给定表中的每个现有元组。这是不同的,因为它绕过了几个完整性检查(取决于我认为的DB风格)。它也无法回滚。
如果您确定要删除表格中的所有项目,TRUNCATE
还可以重置列上的所有auto increment
值,delete from Table
会在您的自动中留下空白递增的值。
Cascade允许您定义以影响参照完整性的方式更新或删除元组的操作的行为(通常是外键)。
答案 2 :(得分:1)
TRUNCATE
基本上意味着'空'。例如,当你上厕所时,你可以截断你的冒号。如果你想维护你的表但去除其中的所有数据,请使用它。
TRUNCATE TABLE students
- &gt;删除STUDENTS表中的所有数据。
例如,这对于测试数据库来说非常方便。
删除记录或表时使用 CASCADE
,基本上意味着“及其附加的一切”。这可能很难使用。例如,如果你要删除你的电脑,你仍然会有3个显示器,鼠标,键盘和你真棒的音响系统。但是,如果您将CASCADE删除您的PC,您将失去连接到PC的所有内容。只带你的桌子和椅子离开你。
CASCADE DELETE FROM STUDENTS WHERE name = 'John'
- &gt;从STUDENTS表中删除所有'John',以及属于'John'的任何其他表中的数据。
确保知道在CASCADE删除某些内容时将删除的内容。