创建一个触发器,要求:当对表sc的grade进行修改时,若分数增加了10%,则将此次操作记录到另一个表中sc_u(sno,cno,oldgrade,newgrade)
时间: 2024-05-12 14:13:53 浏览: 205
您可以使用MySQL中的触发器来实现这个需求。具体的步骤如下:
1. 创建一个新表sc_u,用于记录修改分数的操作。表结构如下:
```
CREATE TABLE `sc_u` (
`sno` char(8) NOT NULL,
`cno` char(4) NOT NULL,
`oldgrade` decimal(5,2) NOT NULL,
`newgrade` decimal(5,2) NOT NULL,
`updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`sno`,`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
2. 创建触发器,在修改表sc的grade字段时触发,判断分数是否增加了10%,如果是,则将对应的记录插入到表sc_u中。触发器代码如下:
```
CREATE TRIGGER `update_grade` AFTER UPDATE ON `sc` FOR EACH ROW
BEGIN
DECLARE old_grade DECIMAL(5,2);
DECLARE new_grade DECIMAL(5,2);
SET old_grade = OLD.grade;
SET new_grade = NEW.grade;
IF (new_grade > old_grade * 1.1) THEN
INSERT INTO sc_u(sno, cno, oldgrade, newgrade) VALUES (OLD.sno, OLD.cno, old_grade, new_grade);
END IF;
END;
```
3. 测试触发器,修改表sc的grade字段,触发触发器,并查看表sc_u中是否有对应的记录。例如:
```
UPDATE sc SET grade = grade * 1.2 WHERE sno = '1001' AND cno = '1';
SELECT * FROM sc_u WHERE sno = '1001' AND cno = '1';
```
以上就是创建触发器的步骤,希望能对您有所帮助。
阅读全文