9、创建触发器tri_gender,实现当修改student表中学生的性别时,确保其性别必须为“男”或“女”。
时间: 2024-05-18 19:15:10 浏览: 115
您可以使用以下 SQL 语句创建名为 tri_gender 的触发器:
```
CREATE TRIGGER tri_gender
BEFORE UPDATE ON student
FOR EACH ROW
BEGIN
IF NEW.gender NOT IN ('男', '女') THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '性别必须为“男”或“女”!';
END IF;
END;
```
这个触发器将在每次更新 student 表的行之前被触发。它会检查新的性别值是否为“男”或“女”,如果不是,则会引发一个 SQLSTATE 为 '45000' 的错误,其中包含“性别必须为‘男’或‘女’!”的信息。这样可以确保在修改性别时,只有正确的值才能被接受。
相关问题
3.建立触发器tri_delete_s2,当删除student表中记录时,将SC表相应记录同时删除。设计用例进行测试。删除触发器tri_delete_s2。
创建触发器:
```
CREATE TRIGGER tri_delete_s2
AFTER DELETE ON student
FOR EACH ROW
DELETE FROM SC WHERE SC.s_id = old.s_id;
```
测试用例:
1. 在student表中删除id为1的记录,检查SC表中是否同时删除了相应记录。
2. 在student表中删除id为2的记录,检查SC表中是否同时删除了相应记录。
3. 在student表中删除id为3的记录,检查SC表中是否同时删除了相应记录。
删除触发器:
```
DROP TRIGGER tri_delete_s2;
```
创建触发器tri_RestrictXK,以保证每门课的选课人数不超过4人;(提示:可选用INSTEAD OF 触发器) 创建触发器tri_UpdateTeacher,以保证在修改某教师的教师号时同时修改选课表中该教师的教师号;(提示:可用FOR触发器)
创建触发器是为了在特定操作发生时自动执行额外的操作,无需手动编写SQL更新语句。这里有两个不同的触发器需求:
1. **创建限制选课人数的触发器tri_RestrictXK (INSTEAD OF触发器)**:
INSTEAD OF触发器会在试图插入或更新数据前生效,所以我们可以创建一个这样的触发器,用于检查新插入或更新的数据是否违反选课人数限制。
```sql
CREATE TRIGGER tri_RestrictXK
INSTEAD OF INSERT OR UPDATE ON [课程表名称]
FOR EACH ROW
AS BEGIN
IF EXISTS (SELECT 1 FROM [选课表名称] WHERE 学生ID = NEW.[学生ID] AND 课程ID = NEW.课程ID)
DELETE FROM [选课表名称] WHERE 学生ID = NEW.[学生ID] AND 课程ID = NEW.课程ID;
IF (
SELECT COUNT(*)
FROM [选课表名称]
WHERE 课程ID = NEW.课程ID) + 1 > 4
ROLLBACK TRANSACTION; -- 如果超过限制,回滚事务
ELSE
INSERT INTO [选课表名称] ([学生ID], 课程ID) VALUES (NEW.[学生ID], NEW.课程ID);
END;
```
在这个触发器里,我们首先检查是否已有此学生的选课记录,如果有则删除。然后检查剩余选课人数是否超过4,如果超过,则撤销此次操作。
2. **创建同步教师信息的触发器tri_UpdateTeacher (FOR触发器)**:
FOR触发器通常在数据更改后立即执行,可以用来维护关联表格的信息同步。
```sql
CREATE TRIGGER tri_UpdateTeacher
AFTER UPDATE ON [教师表名称]
FOR EACH ROW
BEGIN
UPDATE [选课表名称]
SET 教师号 = NEW.教师号
WHERE 教师ID = OLD.教师ID;
END;
```
这个触发器会在教师表的更新操作完成后,查找所有由更新的教师ID关联的选课记录,并将教师号字段更新为新的教师号。
阅读全文