`

参考完整性ON DELETE/UPDATE CASCADE是被引用表(父表)中违反时引用表(子表)的联级

 
阅读更多

mysql> CREATE DATABASE testFK;
Query OK, 1 row affected (0.02 sec)

mysql> USE testFK;
Database changed

mysql> CREATE TABLE course(cNo int NOT NULL,cName VARCHAR(12),PRIMARY KEY(cNo));
Query OK, 0 rows affected (0.06 sec)


mysql> INSERT INTO course VALUES(1,'zucheng'),(2,'shujuku'),(3,'shuxue');
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0


mysql> CREATE TABLE Student(sNo int NOT NULL,cNo INT NOT NULL,sName VARCHAR(12),PRIMARY KE
Y(sNo),FOREIGN KEY(cNo) REFERENCES course(cNO) ON DELETE CASCADE ON UPDATE CASCADE);

Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO Student VALUES(1,1,'zucheng'),(2,1,'shujuku'),(3,2,'shuxue');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM student;
+-----+-----+---------+
| sNo | cNo | sName   |
+-----+-----+---------+
|   1 |   1 | zucheng |
|   2 |   1 | shujuku |
|   3 |   4 | shuxue  |
+-----+-----+---------+
3 rows in set (0.00 sec)


mysql> DELETE * FROM course WHERE cNo=4;


mysql> SELECT * FROM student;
+-----+-----+---------+
| sNo | cNo | sName   |
+-----+-----+---------+
|   1 |   1 | zucheng |
|   2 |   1 | shujuku |
+-----+-----+---------+
2 rows in set (0.00 sec)


mysql> UPDATE course set cNo=3 WHERE cNo=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM student;
+-----+-----+---------+
| sNo | cNo | sName   |
+-----+-----+---------+
|   1 |   3 | zucheng |
|   2 |   3 | shujuku |
+-----+-----+---------+
2 rows in set (0.00 sec)

mysql> UPDATE student SET cNo=4 WHERE sNo=1;
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`tes
tfk/student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`cNo`) REFERENCES `course` (`cNo`)
ON DELETE CASCADE ON UPDATE CASCADE)
mysql> UPDATE student SET cNo=4 WHERE sNo=1;

分享到:
评论

相关推荐

    mysql外键的使用

    - RESTRICT:限制操作,父表记录被删除或更新时,如果子表中有相关记录,则阻止该操作,防止破坏引用完整性。 - SET NULL:父表记录被删除或更新时,子表中对应外键字段设为NULL。需注意,只有当外键允许为NULL时,...

    mysql数据库设置外键应该注意的几点

    例如,`ON DELETE CASCADE`会在父表记录删除时,删除所有相关子表记录;`ON UPDATE CASCADE`则在父表记录更新时,同步更新子表记录。 5. **引用完整性和限制**: 确保在插入或更新子表记录时,外键值在父表中存在...

    Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row:

    “Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row:”,这个异常通常表明试图删除或更新的记录与数据库中的其他记录存在依赖关系,违反了完整性约束,尤其是...

    第5章数据库的完整性.ppt

    参照完整性检查确保外键值在被参照表中存在,防止插入不存在的外键值,同时在删除或更新被参照表中的主键值时,可以设定不同的违约策略,如级联更新(cascade)、拒绝操作(no action)或置空(set null)。...

    Oracle触发器实验报告

    通过创建外键并定义ON UPDATE CASCADE,当employees表中的department_id被更新时,如果在departments表中没有对应项,系统会尝试在departments表中创建相应的记录。这就解释了为什么在更新触发器执行后,employees表...

    3180106071_数据库系统_lab031

    当尝试删除被引用的主键数据时,on delete cascade 会自动删除所有关联的外键数据,如实验所示。同样,更新主键时,on update cascade 会同步更新所有关联的外键,保持数据的一致性。 此外,虽然 MySQL 不直接支持 ...

    实验九 数据备份与恢复及完整性-不经典不传

    `ON DELETE CASCADE`选项表示当`Student`表中的记录被删除时,相关的`SC`表记录也将被级联删除。更新`Student`表中的`sno`,观察外键约束如何响应。 接着,用户定义完整性是根据特定业务需求设置的额外限制。使用`...

    数据库的完整性和安全性实验报告.pdf

    同时,删除和修改操作也受到完整性约束的影响,如级联删除(ON DELETE CASCADE)和违反CHECK约束(如性别字段只能为'男'或'女')。 2. **异常处理**:当违反完整性约束时,SQL Server会返回错误信息,提示操作不能...

    数据库系统概论(王珊第五版)数据库实验9.doc

    数据库完整性是确保数据库中数据准确性和一致性的关键概念,它主要分为实体完整性、参照完整性和用户定义完整性。在实验九中,我们将通过一系列T-SQL语句和触发器的运用来深入理解这些概念。 首先,我们需要掌握...

    MLDN魔乐科技_Oracle课堂17_约束.rar

    同时,可能会讨论到如何处理违反约束的情况,如`ON DELETE CASCADE`和`ON UPDATE CASCADE`选项,它们允许在删除或更新父表记录时自动更新或删除子表中的相关记录。 了解并熟练掌握Oracle数据库的约束机制对于任何...

    第五章-数据库完整性(习题).doc

    6. **级联操作**:在SQL中,当定义了级联操作时,如`ON DELETE CASCADE`或`ON UPDATE CASCADE`,表示当主表中的记录被删除或更新时,从表中的相关记录也会被相应地删除或更新。 7. **属性上的约束条件**:在定义表...

    实验3_3170103456_应承峻1

    并使用`on delete cascade`和`on update cascade`子句,这样当`book`表或`card`表中的记录被删除或更新时,`borrow`表中的相应记录也会自动更新或删除,从而维护参照完整性。 实验中,学生通过插入数据来观察这些...

    数据库系统及原理及MYSQL应用教程数据完整性实验报告

    - **删除 c 表课程编号为 0001 的记录**:通过`DELETE FROM c WHERE 课程编号 = '0001'`命令删除记录,并观察到g表中的相关记录也被自动删除。 - **为表 g 的分数列添加检查约束**:使用`ALTER TABLE g ADD ...

    数据库表的添加、删除、修改等操作

    例如,可以设置`ON DELETE CASCADE`表示当主表中的记录被删除时,子表中的相关记录也会被自动删除。 #### 查询与视图的基本概念与用法 - **查询**:从数据库中检索数据的过程。SQL语言提供了强大的查询功能,可以...

    实验3-3180102173-王子腾1

    `on delete cascade`和`on update cascade`子句的使用意味着当`book`表中某个`bno`被删除或更新时,所有引用该`bno`的`borrow`表记录也会相应地被删除或更新,从而维护参照完整性的规则。 3. **检查约束(Check)**...

    MySQL删除有外键约束的表数据方法介绍

    当试图删除一个被其他表的外键引用的行时,MySQL会抛出错误[Err] 1451,提示“Cannot delete or update a parent row: a foreign key constraint fails”,阻止操作执行,以防止破坏数据的完整性。 解决这个问题的...

    数据库实验报告(5-8)

    此外,可以设置`ON DELETE CASCADE`和`ON UPDATE CASCADE`来处理主表中记录被删除或更新的情况。 - **用户定义完整性**:这类约束由用户自定义,用于满足特定业务逻辑需求,例如通过`CHECK`约束限制年龄或使用`...

    oracle电子文档:数据库约束.rar

    2. **级联删除与更新**:外键约束的ON DELETE CASCADE和ON UPDATE CASCADE选项可以自动处理相关行的删除和更新,但可能会引发意外的数据删除。 五、实际应用案例 1. **员工信息表**:员工ID为主键,姓名、性别等为...

    mysql外键设置

    在此示例中,`child` 表的 `parent_id` 字段被定义为外键,参照 `parent` 表的 `id` 字段,并且指定了 `ON DELETE CASCADE`,表示当删除 `parent` 表中的记录时,`child` 表中对应 `parent_id` 的记录也将被删除。...

    2009达内SQL学习笔记

    在处理SQL语句时,其中所有的空格都被忽略(空格只用来分开单词,连续多个空格当一个用)。 SQL语句可以在一行上写出,建议多行写出,便于阅读和调试。 多条SQL语句必须以分号分隔。多数DBMS不需要在单条SQL语句后...

Global site tag (gtag.js) - Google Analytics