在MySQL中为教学管理系统中学习表创建一个操作日志触发器,其中 xx_log(编号 int,操作类型 char(10),时间 datetime,原学号 char(8),原课程号 char(8),原成绩 smallint,新学号 char(8),新课程号 char(8),新成绩 smallint) 其中,编号自增,操作类型为插入、更新、删除中的一种,表可以使用界面的方式建立。
时间: 2024-02-05 14:13:09 浏览: 48
用触发器生成数据库表的数据操作日志
首先,我们需要创建一个名为 xx_log 的表:
```sql
CREATE TABLE xx_log (
编号 INT AUTO_INCREMENT PRIMARY KEY,
操作类型 CHAR(10),
时间 DATETIME,
原学号 CHAR(8),
原课程号 CHAR(8),
原成绩 SMALLINT,
新学号 CHAR(8),
新课程号 CHAR(8),
新成绩 SMALLINT
);
```
接下来,我们可以为学习表创建一个操作日志触发器,当向学习表中插入、更新或删除记录时,触发器会将相关操作信息插入到 xx_log 表中。
```sql
-- 创建触发器
CREATE TRIGGER my_trigger AFTER INSERT ON 学习表
FOR EACH ROW
BEGIN
IF NEW.学号 IS NOT NULL AND NEW.课程号 IS NOT NULL AND NEW.成绩 IS NOT NULL THEN
-- 插入操作信息到日志表
INSERT INTO xx_log (操作类型, 时间, 原学号, 原课程号, 原成绩, 新学号, 新课程号, 新成绩)
VALUES ('插入', NOW(), NULL, NULL, NULL, NEW.学号, NEW.课程号, NEW.成绩);
END IF;
END;
CREATE TRIGGER my_trigger AFTER UPDATE ON 学习表
FOR EACH ROW
BEGIN
IF OLD.学号 <> NEW.学号 OR OLD.课程号 <> NEW.课程号 OR OLD.成绩 <> NEW.成绩 THEN
-- 插入操作信息到日志表
INSERT INTO xx_log (操作类型, 时间, 原学号, 原课程号, 原成绩, 新学号, 新课程号, 新成绩)
VALUES ('更新', NOW(), OLD.学号, OLD.课程号, OLD.成绩, NEW.学号, NEW.课程号, NEW.成绩);
END IF;
END;
CREATE TRIGGER my_trigger AFTER DELETE ON 学习表
FOR EACH ROW
BEGIN
-- 插入操作信息到日志表
INSERT INTO xx_log (操作类型, 时间, 原学号, 原课程号, 原成绩, 新学号, 新课程号, 新成绩)
VALUES ('删除', NOW(), OLD.学号, OLD.课程号, OLD.成绩, NULL, NULL, NULL);
END;
```
其中,学习表应该替换为实际的表名,触发器会在每次插入、更新、删除记录时自动触发,并将相应的操作信息插入到 xx_log 表中。
阅读全文