触发器添加删除修改 在宿舍管理
时间: 2024-05-30 14:10:36 浏览: 130
在宿舍管理中,触发器可以用于自动化某些任务或操作。以下是几个可能需要用到触发器的场景:
1. 添加学生信息触发器:当管理员向数据库中添加新的学生信息时,可以设置触发器,在学生信息表中自动添加一条新的记录,包含学生的床位号和宿舍号等信息。
2. 删除学生信息触发器:当管理员删除某个学生的信息时,可以设置触发器,在学生信息表中自动删除该学生的床位号和宿舍号等信息。
3. 修改床位信息触发器:当管理员修改某个床位的信息时,可以设置触发器,在学生信息表中自动更新该床位对应的学生的信息。
4. 宿舍维修通知触发器:当某个宿舍需要进行维修时,可以设置触发器,在学生信息表中自动发送通知给该宿舍的所有学生,提醒他们需要搬离宿舍或做好准备工作。
这些触发器可以大大简化管理员的工作量,提高宿舍管理的效率。当然,在使用触发器时,需要注意数据的完整性和安全性,避免出现数据损坏或泄露等问题。
相关问题
帮我写10条宿舍管理系统的触发器,字段你来取,给出详细代码
好的,以下是10条针对宿舍管理系统的触发器,每个触发器都有对应的详细代码。值得注意的是,这里只是提供一些示例触发器,具体触发器的设计应该根据你的具体需求和数据库结构进行。
1. 当有学生添加到宿舍时,自动更新宿舍的剩余床位数。
```sql
CREATE TRIGGER update_dormitory_on_student_insert AFTER INSERT ON student
FOR EACH ROW
BEGIN
UPDATE dormitory SET remaining_beds = remaining_beds - 1 WHERE dorm_id = NEW.dorm_id;
END;
```
2. 当有学生从宿舍中删除时,自动更新宿舍的剩余床位数。
```sql
CREATE TRIGGER update_dormitory_on_student_delete AFTER DELETE ON student
FOR EACH ROW
BEGIN
UPDATE dormitory SET remaining_beds = remaining_beds + 1 WHERE dorm_id = OLD.dorm_id;
END;
```
3. 当有学生从宿舍A转移到宿舍B时,自动更新宿舍A和宿舍B的剩余床位数。
```sql
CREATE TRIGGER update_dormitory_on_student_update AFTER UPDATE ON student
FOR EACH ROW
BEGIN
IF OLD.dorm_id <> NEW.dorm_id THEN
UPDATE dormitory SET remaining_beds = remaining_beds + 1 WHERE dorm_id = OLD.dorm_id;
UPDATE dormitory SET remaining_beds = remaining_beds - 1 WHERE dorm_id = NEW.dorm_id;
END IF;
END;
```
4. 当宿舍的最大床位数被修改时,自动更新该宿舍的剩余床位数。
```sql
CREATE TRIGGER update_dormitory_on_max_beds_update AFTER UPDATE ON dormitory
FOR EACH ROW
BEGIN
UPDATE dormitory SET remaining_beds = NEW.max_beds - (NEW.max_beds - remaining_beds) WHERE dorm_id = NEW.dorm_id;
END;
```
5. 当有新的宿舍被添加时,自动添加一个对应的房间。
```sql
CREATE TRIGGER add_room_on_dormitory_insert AFTER INSERT ON dormitory
FOR EACH ROW
BEGIN
INSERT INTO room (room_num, dorm_id) VALUES (1, NEW.dorm_id);
END;
```
6. 当有新的房间被添加到宿舍中时,自动更新宿舍的房间数。
```sql
CREATE TRIGGER update_dormitory_rooms_on_room_insert AFTER INSERT ON room
FOR EACH ROW
BEGIN
UPDATE dormitory SET num_rooms = num_rooms + 1 WHERE dorm_id = NEW.dorm_id;
END;
```
7. 当有房间从宿舍中删除时,自动更新宿舍的房间数。
```sql
CREATE TRIGGER update_dormitory_rooms_on_room_delete AFTER DELETE ON room
FOR EACH ROW
BEGIN
UPDATE dormitory SET num_rooms = num_rooms - 1 WHERE dorm_id = OLD.dorm_id;
END;
```
8. 当有新的维修请求被添加时,自动将该请求分配给一个负责人。
```sql
CREATE TRIGGER assign_maintenance_on_maintenance_insert AFTER INSERT ON maintenance
FOR EACH ROW
BEGIN
UPDATE maintenance SET assigned_to = (SELECT staff_id FROM staff WHERE job_title = 'Maintenance' ORDER BY RAND() LIMIT 1) WHERE maintenance_id = NEW.maintenance_id;
END;
```
9. 当有新的楼层被添加到宿舍中时,自动添加对应数量的房间和床位数。
```sql
CREATE TRIGGER add_rooms_on_floor_insert AFTER INSERT ON floor
FOR EACH ROW
BEGIN
DECLARE @i INT DEFAULT 0;
WHILE @i < NEW.num_rooms DO
INSERT INTO room (room_num, dorm_id) VALUES ((SELECT COUNT(*) FROM room WHERE dorm_id = NEW.dorm_id) + 1, NEW.dorm_id);
SET @i = @i + 1;
END WHILE;
UPDATE dormitory SET max_beds = max_beds + NEW.num_rooms * NEW.beds_per_room, remaining_beds = remaining_beds + NEW.num_rooms * NEW.beds_per_room WHERE dorm_id = NEW.dorm_id;
END;
```
10. 当有房间被删除时,自动更新宿舍的床位数。
```sql
CREATE TRIGGER update_dormitory_on_room_delete AFTER DELETE ON room
FOR EACH ROW
BEGIN
UPDATE dormitory SET max_beds = max_beds - (SELECT beds_per_room FROM floor WHERE floor_id = OLD.floor_id) WHERE dorm_id = OLD.dorm_id;
UPDATE dormitory SET remaining_beds = remaining_beds - (SELECT beds_per_room FROM floor WHERE floor_id = OLD.floor_id) WHERE dorm_id = OLD.dorm_id;
END;
```