使用数据库语句 有学生表和班级信息表,创建触发器,如果有学生转系,则相应系人数也一并修改。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用数据库语句 有学生表和班级信息表,创建触发器,如果有学生转系,则相应系人数也一并修改。相关的知识,希望对你有一定的参考价值。

如果是软件开发,尽量少用触发器,数据库表越简单越好,后期维护容易没有限制;如果是学习研究,那你得把学生表,班级信息表,学院相关系表里的相关字段及说明贴出来才能知道怎么把本来可以做在代码里的东西换成触发器实现追问

create table student
(Sno int primary key,
Sname varchar(20) not null,
Ssex char(4),
sBirthDate datetime,
sDepNo int foreign key references Department(sDepNo)
)
create table Department
(
sDepNo int primary key,
sDepName varchar(20) not null
sDtotal int
)
可以了吗

追答

可以,具体语句我不太确定,思路是在student表上建立一个触发器,要不要存储过程就要看情况了,select所有sDepNo,count(*)的信息,group by sDepNo,然后update on Department set new.sDtotal=那个count(*)算出的值;语法可能是错的,但是意思就是这样的。确实有点复杂的,利用存储过程的话就相当于写代码差不多的样子了,可以把select,update的语句单独作成几个存储过程来使用的。祝你能调试出正确代码,或者也有高人可以用其他数据库方面的方法做出来的

参考技术A 你想问什么

sql中触发器当修改学生班级信息时自动修改相应班级的学生人数

怎么实现被修改的班级人数-1,修改后的班级人数+1呢?

create or replace trigger test_trigger

after update on 学生表

for each row

begin

      update 班级表 set 班级表.人数=班级表.人数-1 where 班级表.班级= :old.班级;

      update 班级表 set 班级表.人数=班级表.人数+1 where 班级表.班级= :new.班级;

      commit;

end;

参考技术A if (object_id('tri','tr')is not null )
drop trigger tri
go
create trigger tri 
ON dbo.学生表
FOR  UPDATE 
as 
IF UPDATE(班级id) 
declare @班级1 int 
declare @班级2 int 

SELECT  @班级1=班级id
from inserted 
SELECT @班级2=班级id 
FROM deleted 

update 班级表 set 人数=人数+1 where 班级= @班级1
update 班级表 set 人数=人数-1 where 班级= @班级2
GO

以上是关于使用数据库语句 有学生表和班级信息表,创建触发器,如果有学生转系,则相应系人数也一并修改。的主要内容,如果未能解决你的问题,请参考以下文章

怎样编写SQL语句求平均成绩

怎样编写SQL语句求平均成绩

sql 怎样创建触发器,分别实现增加、删除学生和修改学生班级信息时自动修改相应班级学生人数

sql 触发器 子查询返回的不止一个值

MYSQL的存储过程如何返回查询到的行数据?

MyBatis之关联关系