JulTianxiang 发表于 2021-1-27 15:30

求数据库大佬帮助

在学生表中插入一条学生信息,先判断班级表中是否有该学生的班级,如果没有,就添加并更新班级人数,如果有,直接更新班级人数,请问怎么用触发器实现?
student(Sno,Sname,Ssex,Syear,Sdept,Smajor,Classname,Sbirth,Saddress)
class(Syear,Cdept,Cmajor,Classnem,Classnumber)
触发器不能实现的话,应该用什么实现??

郑郑郑 发表于 2021-1-27 15:30

个人理解instead of 触发器就可以,执行inser语句之后触发器执行,去instered虚表中获取班级信息保存变量,然后查询class表带上这个条件信息,如果if exists为true则更新此班级人数,否则就向class表中insert一条语句,
但是你这个需求有问题,如果此班级不存在,那么class表中的其他属性值从哪来?还有,class和student应该是有外键关联的,这样的话插入一条从表class没有的值数据库也会报错的。

ming1332236 发表于 2021-1-27 15:38

多种实现方式,逻辑层业务代码实现,存储过程,触发器都可以,具体怎么实现要看是什么数据库,不同数据库实现方式不同

JulTianxiang 发表于 2021-1-27 15:47

ming1332236 发表于 2021-1-27 15:38
多种实现方式,逻辑层业务代码实现,存储过程,触发器都可以,具体怎么实现要看是什么数据库,不同数据库实现方 ...

就很简单的一个课程设计用的是mysql+navicat,想在navicat中设计学生表时添加触发器,对班级表进行操作,就是sql语句不太会

梓沐 发表于 2021-1-27 15:49

本帖最后由 梓沐 于 2021-1-27 15:52 编辑

搞个存储过程把

DQQQQQ 发表于 2021-1-27 16:17

是我见识浅薄了嘛?有select触发器???增删改才有触发器吧?

okij12589 发表于 2021-1-27 16:22

很想帮你,但是不会触发器,
只会写php逻辑{:301_1008:}

ChengXuHa 发表于 2021-1-27 16:41

https://www.cnblogs.com/Brambling/p/6741666.html 希望可以帮到你

twshe 发表于 2021-1-27 16:43

USE
GO
/****** Object:Trigger .[修改则写入时间]    Script Date: 01/27/2021 16:41:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER .[修改则写入时间]
ON .
WITH EXECUTE AS CALLER
AFTER UPDATE
AS
BEGIN
update spml set UPDATE_TIME=getdate()
FROM
SPML AS F
INNER JOIN inserted
AS i
ON F.SPBH = i.SPBH;
END

这是我弄的SQL SERVER,你看看改改能用吧
页: [1]
查看完整版本: 求数据库大佬帮助