有两个表:
在<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input type="number" v-model="n" />
<p> {{ always100 }}</p>
</div>
表中,EMPLOYEES
是主键。
EMPLOYEE_ID
是管理员标识符,指的是MGR_ID
。
EMPLOYEE_ID
是DEPT_ID
表的DEPARTMENT_ID
列的外键。
在DEPARTMENTS
表中,DEPARTMENTS
是主键。
当我执行以下命令时
DEPARTMENT_ID
我得到这个结果
0行影响
我的外键的参照完整性受到限制-DELETE
FROM departments
WHERE department_id = 40;
。为什么删除不级联?
该表的ON DELETE CASCADE
引用列中的MGR_ID
无关紧要吗?
答案 0 :(得分:0)
您不能删除它,因为它与主键有依赖关系,如果您仍要继续操作,则必须打破依赖关系或在查询中删除依赖关系。
答案 1 :(得分:0)
如果您的表Employees
具有类似于以下内容的语句:
CONSTRAINT Dept_ID_FK__Departments FOREIGN KEY (department_id )
REFERENCES dbo.Departments(department_id )
这意味着您无法像您写的那样删除,因为SQL Server
不允许您删除带有department_id = 40
的行:
DELETE
FROM departments
WHERE department_id = 40;
在Employee
表中有DeptId
的行链接到Departments
表。因为它将使数据进入损坏状态。
答案 2 :(得分:0)
Try to delete all rows in EMPLOYEES where DEPT_ID=40
DELETE
FROM EMPLOYEES
WHERE DEPT_ID=40
and after it execute your sql:
DELETE
FROM departments
WHERE department_id = 40;
答案 3 :(得分:0)
发生的事情是简单的引用完整性提高了,并且您的delete语句已被数据库正确阻止。
假设您可以在DEPARTMENTS
中删除Department_ID = 40
中的行
然后,在您的表EMPLOYEES
中,至少会有一行指向一个不存在的部门!!!
换句话说,您的数据库将损坏。
这就是外键的目的,以确保根本没有办法破坏数据库。
从DEPARTMENTS
删除该行的唯一方法是首先从该Department_ID取消耦合EMPLOYEES
中的所有行。
因此,您要么首先将所有员工都耦合到另一个部门
update EMPLOYEE
Set Dept_ID = 20 -- or some other...
where Dept_ID = 40
或者您删除所有员工
delete from EMPLOYEE where Dept_ID = 40
现在您可以删除部门
但我仍然不明白为什么您没有收到错误消息...