我想知道 SQL 中截断和级联之间的确切区别。
3 回答
TRUNCATE
基本上意味着“空”。例如,您可以在上厕所时截断结肠。如果您想维护您的表但要删除其中的所有数据,请使用此选项。
TRUNCATE TABLE students
-> 删除 STUDENTS 表中的所有数据。
例如,这对于测试数据库很方便。
CASCADE
在删除记录或表格时使用,基本上表示“以及附加到它的所有内容”。这可能很难使用。例如,如果您要删除您的 PC,您仍将拥有 3 台显示器、鼠标、键盘和出色的音响系统。但是,如果您将级联删除您的 PC,您也将丢失连接到 PC 的所有内容。只剩下你的桌子和椅子。
CASCADE DELETE FROM STUDENTS WHERE name = 'John'
-> 从 STUDENTS 表中删除所有“John”,以及属于“John”的任何其他表中的数据。
一定要知道在 CASCADE DELETE 删除某些东西时会删除什么。
级联参照完整性约束允许您定义当用户尝试删除或更新现有外键指向的键时应发生的操作。
常见的观察动作
无操作:这是默认行为。No Action 指定如果尝试删除或更新具有其他表中现有行中的外键引用的键的行,则会引发错误并回滚 DELETE 或 UPDATE。
Cascade:指定如果尝试删除或更新具有由其他表中现有行中的外键引用的键的行,则包含这些外键的所有行也将被删除或更新。
Set NULL: Specifies that if an attempt is made to delete or update a row with a key referenced by foreign keys in existing rows in other tables, all rows containing those foreign keys are set to NULL.
Set Default: Specifies that if an attempt is made to delete or update a row with a key referenced by foreign keys in existing rows in other tables, all rows containing those foreign keys are set to default values.
Truncate:: TRUNCATE normally deletes off all rows from a table and unlike a DELETE it cannot be rolled back.
你能详细说明一下吗?
截断在逻辑上等同DELETE FROM Table;
于它删除给定表中的每个现有元组。它是不同的,因为它绕过了几个完整性检查(取决于我相信的数据库风格)。它也无法回滚。
如果您确定要消除表中的每个项目,TRUNCATE
还具有重置auto increment
列上的任何值的优势,delete from Table
这将在您的自动递增值中留下间隙。
Cascade 允许您定义以影响参照完整性(通常是外键)的方式更新或删除元组的操作的行为。