MySQL 级联删除
在 MySQL 语言中,约束是指在表上强制执行以避免某些异常的一组规则。
这些异常会导致表中出现错误记录。基于故障的行为,约束可以是各种类型。
它们是参照完整性、实体约束和语义约束。这些具有基于故障类型以及如何避免不一致行为的含义和用法。
让我们简要了解存在的约束类型。
-
参照完整性是应用于其他表以对数据实施限制的约束。最常用的约束是外键约束。
如果父表有修改,子表应与父表保持一致。如果是删除记录的情况,则子记录中的引用不应保持悬空,并且是引用完整性约束。
例子:
create table report_card (stu_roll_number int, stu_marks int, stu_course varchar2(30) references student);
在上面的示例中,成绩单显示了父表 student 中学生的部门或课程。如果引用完整性约束被应用,那么一个表中的操作将影响子表中的工作。
在参照完整性约束下,on delete cascade
是参照完整性约束,如果父记录被删除,它会自动删除子记录。它是对从外键采取的引用动作的响应。
例子:
CREATE TABLE Student (stu_id int(10) NOT NULL, name varchar(10) NOT NULL, birthdate date NOT NULL, PRIMARY KEY (stu_id));
上面的查询创建了一个表 student,其属性或列作为学生 ID,int
类型和主键作为列的实体约束。其他值属性包括名称和生日,其数据类型为 varchar
和 date
。
CREATE TABLE Department (dept_id int(20) PRIMARY KEY NOT NULL,stu_id int(10) NOT NULL, dept_name varchar(20) NOT NULL, FOREIGN KEY (stu_id) REFERENCES Student (stu_id) ON DELETE CASCADE);
在上面的查询中,形成了一个部门表,其属性为 id、部门名称和学生 id。此外,学生 ID 将充当父表中的引用或外键。
这里的 on delete cascade
约束说,当学生 id 发生任何删除时,它从部门表中的条目也将被删除。因此,删除后不会有与该系学生对应的条目。
让我们在表中插入记录,看看这里的操作是如何工作的。
首先,在表 Student
中插入记录。
INSERT INTO Student (stu_id, name, birthdate) VALUES
(101, 'John', '1995-11-12'),
(102, 'Jian', '1983-07-19'),
(103, 'Jackey', '1965-10-23');
上面的查询将在表 Student
中插入三条记录。
在表部门
中插入记录。
INSERT INTO Department (dept_id, stu_id, dept_name) VALUES
(301, 101, 'Physics'),
(302, 101, 'Science'),
(303, 102, 'Maths');
上面的查询将为表部门中的各个学生 ID 插入三个部门。
现在让我们删除父表中的一条记录。
DELETE FROM Student WHERE stu_id = 102;
最终结果将删除表部门的第三条记录,因为其父表的引用被删除,使第三条记录悬空。
因此,它使用 on delete cascade
属性折叠第三条记录。该属性是参照完整性约束属性,当父表受到影响时,它会删除子表中的记录。
相关文章
MySQL 中的 Datepart 函数替代方案
发布时间:2024/03/25 浏览次数:155 分类:MySQL
-
本教程说明了用于在 MySQL 中提取部分日期时间的通用 SQL datepart 函数的替代方法。