创建一个触发器tr,把修改时间,学号,课程编号,修改前成绩,修改后成绩保存到数据表trigger_log中
时间: 2023-07-31 15:03:54 浏览: 177
你可以使用以下 SQL 语句来创建一个触发器,实现将修改时间、学号、课程编号、修改前成绩、修改后成绩保存到数据表 trigger_log 中:
```
CREATE TRIGGER tr
AFTER UPDATE ON scores
FOR EACH ROW
BEGIN
INSERT INTO trigger_log (modify_time, student_id, course_id, before_score, after_score)
VALUES (NOW(), OLD.student_id, OLD.course_id, OLD.score, NEW.score);
END;
```
这个触发器会在 scores 表中的记录被修改后自动执行,将修改时间、学号、课程编号、修改前成绩、修改后成绩插入到 trigger_log 表中。其中 NOW() 函数获取当前时间,OLD 和 NEW 分别代表修改前和修改后的记录。
相关问题
1.创建触发器tr1,实现当修改商品表中的数据时,显示提示信息“商品表信息被修改了。” 2.使用触发器tr2,实现当修改商品表中某种商品的商品编号时,对应购买信息表中的商品编号也要修改。 3.创建一个DDL触发器tr3,禁止修改和删除当前数据库中的任何表。 4.查看商品表中已创建的触发器。 5.查看已创建的触发器tr1的内容。 6.删除商品表上的触发器tr1。
以下是针对题目的触发器创建和修改的代码:
1. 创建触发器tr1
```sql
CREATE TRIGGER tr1
ON 商品表
AFTER UPDATE
AS
BEGIN
PRINT '商品表信息被修改了。'
END;
```
2. 创建触发器tr2
```sql
CREATE TRIGGER tr2
ON 商品表
AFTER UPDATE
AS
BEGIN
IF UPDATE(商品编号)
BEGIN
UPDATE 购买信息表 SET 商品编号 = inserted.商品编号 FROM 购买信息表 JOIN inserted ON 购买信息表.商品编号 = deleted.商品编号;
END;
END;
```
3. 创建DDL触发器tr3
```sql
CREATE TRIGGER tr3
ON DATABASE
FOR ALTER_TABLE, DROP_TABLE
AS
BEGIN
PRINT '当前数据库中的任何表不允许修改和删除。';
ROLLBACK;
END;
```
4. 查看商品表中已创建的触发器
```sql
SELECT * FROM sys.triggers WHERE parent_object_id = OBJECT_ID('商品表');
```
5. 查看已创建的触发器tr1的内容
```sql
sp_helptext tr1;
```
6. 删除商品表上的触发器tr1
```sql
DROP TRIGGER tr1 ON 商品表;
```
.创建一个触发器,当修改XS_KC表中数据时,如果修改后的成绩小于60分,则触发器将该成绩对应的课程学分修改为0,否则将该学分改成对应课程的学分
很抱歉,刚才我回答的似乎有误,请允许我重新回答:
您可以使用以下 SQL 语句创建触发器:
```sql
CREATE TRIGGER update_xs_kc
AFTER UPDATE ON XS_KC
FOR EACH ROW
BEGIN
DECLARE credit DECIMAL(4,2);
SELECT CREDIT INTO credit FROM KC WHERE KC.COURSE_ID = NEW.COURSE_ID;
IF NEW.SCORE < 60 THEN
SET NEW.CREDIT = 0;
ELSE
SET NEW.CREDIT = credit;
END IF;
END;
```
该触发器会在 XS_KC 表中的数据更新后自动触发。如果更新后的成绩小于60分,则会将该成绩对应的课程学分修改为0;否则将该学分改成对应课程的学分。其中,KC 表为课程表,XS_KC 表为学生选课表,包含学生ID、课程ID、成绩和学分等字段。
阅读全文