对SC1表设计一个触发器,该触发器保证每个学生所选课程的总学分不超过12分。用SQL语句验证此触发器。
时间: 2024-03-08 17:45:40 浏览: 151
以下是对SC1表设计的触发器:
```sql
CREATE TRIGGER check_credit
BEFORE INSERT OR UPDATE ON SC1
FOR EACH ROW
BEGIN
DECLARE total_credit INT;
SELECT SUM(Credit) INTO total_credit FROM Course WHERE Course_id IN (SELECT Course_id FROM SC1 WHERE Sno = NEW.Sno);
IF total_credit + NEW.Credit > 12 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'The total credits of selected courses cannot exceed 12!';
END IF;
END;
```
触发器检查了每个学生所选课程的总学分是否超过12分。在插入或更新SC1表中的数据时,触发器会计算学生已选课程的总学分,并与将要插入或更新的课程的学分求和。如果总学分超过12,则触发器会抛出一个错误信息。
以下是用SQL语句验证此触发器的方法:
首先,我们需要创建SC1表和Course表,插入一些数据:
```sql
CREATE TABLE SC1 (
Sno CHAR(10),
Course_id CHAR(8),
Score INT,
Credit INT,
PRIMARY KEY (Sno, Course_id)
);
CREATE TABLE Course (
Course_id CHAR(8),
Course_name VARCHAR(20),
Credit INT,
PRIMARY KEY (Course_id)
);
INSERT INTO Course VALUES ('C1', 'Math', 4);
INSERT INTO Course VALUES ('C2', 'English', 3);
INSERT INTO Course VALUES ('C3', 'Physics', 5);
INSERT INTO SC1 VALUES ('S1', 'C1', 80, 4);
INSERT INTO SC1 VALUES ('S1', 'C2', 90, 3);
```
接下来,我们尝试插入一条学生选课记录,使其总学分超过12:
```sql
INSERT INTO SC1 VALUES ('S1', 'C3', 85, 6);
```
这时,触发器会抛出以下错误信息:
```
ERROR 1644 (45000): The total credits of selected courses cannot exceed 12!
```
可以看到,触发器成功地检测到了学生选课总学分超过12的情况,并抛出了错误信息。
阅读全文