(6) 在teacher表中,定义一个触发器teach_trigger,当一个教师的信息被删除时,把该教师的编号和姓名添加到delete_teacher表中
时间: 2024-05-16 07:16:43 浏览: 10
可以使用以下SQL语句创建一个名为teach_trigger的触发器:
```
CREATE TRIGGER teach_trigger
AFTER DELETE ON teacher
FOR EACH ROW
INSERT INTO delete_teacher (teacher_id, teacher_name)
VALUES (OLD.teacher_id, OLD.teacher_name);
```
这个触发器会在teacher表中有一条记录被删除时执行。它会将被删除的教师的编号和姓名插入到delete_teacher表中的相应列中。在这个触发器中使用了OLD关键字来表示被删除的记录。
相关问题
编写一个触发器 tr_del:当从 teacher 表中删除一个教师时,在teaching表内,该教师的上课 记录也自动删除;
可以使用 MySQL 中的触发器来实现该功能。下面是一个示例的 SQL 代码:
```
CREATE TRIGGER tr_del
AFTER DELETE ON teacher
FOR EACH ROW
BEGIN
DELETE FROM teaching WHERE teacher_id = OLD.teacher_id;
END;
```
解释一下上面的代码:
- `CREATE TRIGGER` 是创建触发器的关键字;
- `tr_del` 是触发器的名称,可以自己取一个有意义的名称;
- `AFTER DELETE ON teacher` 表示在执行 teacher 表的 DELETE 操作之后触发该触发器;
- `FOR EACH ROW` 表示对于每一行数据都执行触发器代码;
- `BEGIN` 和 `END` 之间是触发器需要执行的代码块;
- `DELETE FROM teaching WHERE teacher_id = OLD.teacher_id` 表示从 teaching 表中删除 teacher_id 等于被删除教师的 ID 的所有记录。其中的 `OLD.teacher_id` 表示被删除的教师的 ID。
这样,当从 teacher 表中删除一个教师时,触发器会自动删除 teaching 表中与该教师相关的记录。
在teacher表上建立一个DELETE触发器T_teacherDel,防止用户删除teacher表通信学院的记录。设计用例进行测试。删除触发器T_teacherDel。
好的,您的问题是在teacher表上建立一个DELETE触发器T_teacherDel,防止用户删除teacher表通信学院的记录。设计用例进行测试。删除触发器T_teacherDel。
首先,我们来创建T_teacherDel触发器,该触发器将在从teacher表中删除数据时被触发,并检查是否是通信学院的记录。如果是,则阻止删除操作:
```
CREATE TRIGGER T_teacherDel
BEFORE DELETE ON teacher
FOR EACH ROW
BEGIN
IF OLD.college = '通信学院' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete record from 通信学院';
END IF;
END;
```
接下来,我们可以设计以下测试用例来测试该触发器:
1. 删除一个非通信学院的记录,观察是否成功删除。
```
DELETE FROM teacher WHERE id = 1;
```
2. 删除一个通信学院的记录,观察是否阻止删除。
```
DELETE FROM teacher WHERE id = 2;
```
3. 删除多条数据,其中包含通信学院的记录,观察是否阻止删除。
```
DELETE FROM teacher WHERE college = '通信学院';
```
最后,我们可以删除T_teacherDel触发器:
```
DROP TRIGGER IF EXISTS T_teacherDel;
```
希望这个回答能够帮助您!