为 department 表的 manager 属性增加参照完整性约束,要求该属性参照员工表 omployee 的主码属性empno,并举例实实践验证 DBMS 的违约处理机制,写出具休的实验数据、步骤和结果。
时间: 2024-02-11 11:04:15 浏览: 77
好的,下面是增加参照完整性约束的SQL语句:
```sql
ALTER TABLE department
ADD CONSTRAINT fk_manager_empno
FOREIGN KEY (manager) REFERENCES employee (empno);
```
这条语句将会为department表的manager属性增加一个参照完整性约束,约束条件为manager属性参照employee表的主码属性empno。
下面是实验数据、步骤和结果:
1. 数据准备:
在employee表中插入一条记录:
```sql
INSERT INTO employee (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (1001, 'John', 'Manager', null, '2022-01-01', 5000, null, 10);
```
在department表中插入一条记录:
```sql
INSERT INTO department (deptno, dname, loc, manager)
VALUES (10, 'Sales', 'Beijing', 1001);
```
2. 违反参照完整性约束:
尝试在employee表中删除empno为1001的记录:
```sql
DELETE FROM employee WHERE empno = 1001;
```
此时会提示错误信息:
```
The DELETE statement conflicted with the REFERENCE constraint "fk_manager_empno".
The conflict occurred in database "database_name", table "dbo.department", column 'manager'.
```
提示说明删除操作违反了参照完整性约束,因为department表中的manager属性参照了employee表中的empno属性。
3. 恢复数据:
为了避免数据损坏,可以通过以下语句将删除的数据恢复:
```sql
INSERT INTO employee (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (1001, 'John', 'Manager', null, '2022-01-01', 5000, null, 10);
```
恢复数据后,再次尝试删除empno为1001的记录,就不会受到违反参照完整性约束的限制了。
通过上述实验,我们可以验证DBMS的参照完整性约束机制,当违反参照完整性约束时,DBMS会阻止操作并提示错误信息,保证了数据的完整性和一致性。
阅读全文