1、熟悉触发器的创建和删除格式。 2、建立触发器,限定学生年龄在15-45岁之间 3、建立触发器,记录学生成绩被修改的信息,如谁在什么时间,修改了谁的成绩,旧成绩是多少?新成绩又是多少 4、建立触发器,如果学生选课记录超过8条,拒绝选课 测试并上传代码和试运行截图
时间: 2024-12-22 20:18:39 浏览: 7
在数据库管理系统中,触发器是一种特殊的存储过程,它们会在特定的数据操作(例如插入、更新或删除)发生时自动执行。以下是关于触发器的创建、删除以及一些示例:
1. **创建触发器格式**:
- SQL Server (T-SQL):
```
CREATE TRIGGER trigger_name ON table_name
FOR ACTION (INSERT | UPDATE | DELETE)
AS
BEGIN
-- 触发器执行的SQL语句
END;
```
- MySQL:
```
CREATE TRIGGER trigger_name AFTER INSERT/UPDATE/DELETE ON table_name
FOR EACH ROW
BEGIN
-- 触发器执行的SQL语句
END;
```
2. **限制年龄的触发器(MySQL)**:
```
CREATE TRIGGER limit_age
AFTER INSERT ON students
FOR EACH ROW
BEGIN
IF NEW.age NOT BETWEEN 15 AND 45 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Age must be between 15 and 45';
END IF;
END;
```
3. **记录成绩修改的触发器(SQL Server)**:
```
CREATE TRIGGER log_score_change
ON student_scores
AFTER UPDATE
AS
BEGIN
INSERT INTO score_history (student_id, old_score, new_score, updated_by, update_time)
VALUES (OLD.student_id, OLD.score, NEW.score, USER_NAME(), GETDATE());
END;
```
4. **防止选课超限的触发器(MySQL)**:
```
CREATE TRIGGER max_courses_limit
AFTER INSERT ON course_enrollments
FOR EACH ROW
IF (SELECT COUNT(*) FROM course_enrollments WHERE student_id = NEW.student_id) > 8
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Student has reached the maximum course limit of 8';
END IF;
```
请注意,这些代码示例仅供参考,实际应用中需要调整表名、字段名称等以匹配您的数据库结构,并可能需要额外权限才能执行。在测试和部署前,一定要在测试环境中运行,确保触发器按照预期工作。
阅读全文