按下列要求,将文档里的代码补充修改完整:1.创建一个触发器,防止对score表进行插入、修改、删除操作。 2.创建一个触发器,当修改课程表中课程编号时,同步修改成绩表中的课程编号。 3.创建一个触发器,当删除教师表中某教师时,同步删除授课表中该教师的授课信息。
时间: 2024-12-22 22:18:34 浏览: 5
根据您的需求,以下是针对每个任务的完整和修正后的SQL代码:
### 1. 创建一个触发器,防止对 `score` 表进行插入、修改、删除操作
```sql
CREATE OR REPLACE TRIGGER T_ProtectScore
BEFORE INSERT OR UPDATE OR DELETE ON score
FOR EACH ROW
BEGIN
RAISE_APPLICATION_ERROR(-20001, '禁止对成绩表进行任何更改');
END;
/
```
### 2. 创建一个触发器,当修改课程表中课程编号时,同步修改成绩表中的课程编号
```sql
CREATE OR REPLACE TRIGGER T_UpdateCourseScore
AFTER UPDATE OF cno ON course
FOR EACH ROW
BEGIN
UPDATE score
SET cno = :NEW.cno
WHERE cno = :OLD.cno;
END;
/
```
### 3. 创建一个触发器,当删除教师表中某教师时,同步删除授课表中该教师的授课信息
```sql
CREATE OR REPLACE TRIGGER T_DeleteTeacherLecture
AFTER DELETE ON teacher
FOR EACH ROW
BEGIN
DELETE FROM lecture
WHERE tno = :OLD.tno;
END;
/
```
### 测试代码
为了验证这些触发器是否正常工作,您可以使用以下测试代码:
#### 测试触发器 `T_ProtectScore`
```sql
-- 尝试插入数据
INSERT INTO score (sno, cno, grade) VALUES ('184001', '1001', 90);
-- 尝试更新数据
UPDATE score SET grade = 95 WHERE sno = '184001';
-- 尝试删除数据
DELETE FROM score WHERE sno = '184001';
```
#### 测试触发器 `T_UpdateCourseScore`
```sql
-- 修改课程编号
UPDATE course SET cno = '1004' WHERE cno = '1002';
-- 查看课程表和成绩表的变化
SELECT * FROM course;
SELECT * FROM score;
```
#### 测试触发器 `T_DeleteTeacherLecture`
```sql
-- 删除教师
DELETE FROM teacher WHERE tno = '100002';
-- 查看教师表和授课表的变化
SELECT * FROM teacher;
SELECT * FROM lecture;
```
希望这些代码能满足您的需求。如果有任何进一步的问题或需要更多的帮助,请随时告诉我。
阅读全文