利用SQL 2、建立触发器,限定学生年龄在15-45岁之间 3、建立触发器,记录学生成绩被修改的信息,如谁在什么时间,修改了谁的成绩,旧成绩是多少?新成绩又是多少 4、建立触发器,如果学生选课记录超过8条,拒绝选课 并生成结果
时间: 2024-12-23 19:16:57 浏览: 8
利用SQL(Structured Query Language),数据库管理系统的一种标准化语言,可以实现各种数据库操作和管理任务。针对您的需求,以下是四个具体的例子:
1. **限制学生年龄范围**:
```sql
CREATE TRIGGER age_check
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
IF NEW.age < 15 OR NEW.age > 45 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '学生年龄超出范围';
END IF;
END;
```
这个触发器会在插入新学生信息前检查年龄是否在15到45岁之间。
2. **记录成绩修改**:
```sql
CREATE TRIGGER score_history
AFTER UPDATE OF score ON grades
FOR EACH ROW
BEGIN
INSERT INTO grade_changes (student_id, old_score, new_score, updated_at)
VALUES (OLD.student_id, OLD.score, NEW.score, NOW());
END;
```
每次成绩被更新时,会自动添加一条记录到`grade_changes`表,包含原分数、新分数及修改时间。
3. **防止选课过多**:
```sql
CREATE TRIGGER max_courses_check
AFTER INSERT ON course_selections
FOR EACH ROW
WHEN (SELECT COUNT(*) FROM course_selections WHERE student_id = NEW.student_id) >= 8
BEGIN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '学生已选课程超过8门,无法再选';
END;
```
当某学生选课次数达到8次时,尝试再次选课会触发此错误。
4. **查询结果生成**:
对于最后的结果查询,这通常不在触发器里完成,而是在应用层面。但在数据库中,你可以创建视图(view)来展示这个限制后的数据:
```sql
CREATE VIEW restricted_courses AS
SELECT * FROM course_selections WHERE student_id NOT IN (
SELECT student_id FROM course_selections GROUP BY student_id HAVING COUNT(*) > 8
);
```
这样用户就可以看到不超过8门课程的学生选择。
阅读全文