高手都说做项目都不用触发器,和存储过程.但我还是想问个触发器的问题!

时间:2022-06-22 05:00:41
为什么我的这个触发器有问题?


create table student
(
  stid char(10)primary key,
  stname char(20)
)

create table grade
(
  stid char(10)foreign key references student(stid),
 stgrade int
)

--select * from student
insert into student values('00533','徐超飞')
insert into grade values('00533',98)


create trigger del_trigger         --有问题了,创建不了
on student
 for delete
as
delete grade where grade.stid = stuent.stid
go

delete student where stid='00533'







22 个解决方案

#1


1. “高手都说做项目都不用触发器,和存储过程.”并不正确。用触发器和存储过程可以极大地简化前端系统的开发,对数据一致性、完整性等很多方面都有好处。

2. 你的触发器不能建立是因为你写的SQL语法有错:
   delete grade where grade.stid = stuent.stid

   缺少From子句表明引用student表。看起来可以改成:
   delete grade where grade.stid in (select stid from student)

   看你的意思是不是想在删除了student中记录时同时删除子表grade中的纪录?如果是,你的语句就还有问题。由于你已经在grade中定义了外键stid,那么主表中的记录就不能这样删除,否则由于子表中同值记录的存在使得主表的删除操作失败。

3. 建议:取消在grade中定义的外键stid,建立如下的触发器:

   create trigger del_trigger on student
     for delete
   as

   delete grade where stid in (select stid form deleted)

   return

#2


我个人认为在数据库中用触发器和存储过程,可以大大减少数据的传输,也就提高了效率。再说在存储过程中修改程序,比前台修改方便多了!

#3


#4


************************************************************
************8        高手啊.再问一个问题啊.******************

在SQL里如果才能进行并发处理呢?
比如说,有一个网络售票系统,A站和B站的售票点,同时有一张从北京到南宁的票C出售.但是票且只能由一个人买得.假如也有两个人A和B同时都想买这张票,它们都同时点了这张票.怎么办?

//有例子,能给来看看吗?
或给个思路好吗?
分再加90我就这么多分了.
哪位高的分多的能不能捐一些给我呢?

#5


菜用存储过程来做肯定没问题.
再在存储过程中对c操作的时候加一把"派它锁".可以保证买票的问题.

#6


231yy我看不明白啊.说清楚些好吗?

#7


事务处理

#8


这样的话我的一百五也太好拿了吧.总我一百分我是给nononono(null,null) 的了

#9



  什么高手,胡说八道

#10


关于在SQL里如果才能进行并发处理的问题
你不用去担心,因为数据库本生就可以在修改数据或添加删除数据时他会锁定一条数据源,别的没办法修改的!
如果你要有个修改的优先级,就得自己来设定优先级!

#11


高手之高,不知是手高心低还是心低手高!

#12


关注楼主这个问题 在SQL里如果才能进行并发处理呢?

#13


我UP

#14


up

http://www.csdn.net/cnshare/soft/11/11463.shtm

#15


我up

#16


向 nononono(null,null) 学习。

#17


你用的是不是SQL Server数据库啊,你最好说明一下。
简单一点增加一个标识字段(表示这张票是不是已经被买掉了),更新的时间增加条件未被买掉的更新,最后去检查更新条数,如果更新条数大于说明这次买票成功,否则没有买到票。

--SQL Server的触发器在触发时根据操作类型的不同会创建一个或两个临时表inserted、deleted
--触发器只是一种特殊的存储过程,最好不用要不在调试或其它人在操作这张表时会造成很多麻繁
create trigger del_trigger 
on student
 for delete
as
delete grade where grade.stid = deleted.stid
go

#18


是的,我在联通出差的时候,看到联通的数据库从来就不用触发器的。

#19


结了。算了。有机会在问了。这么久都不结,都对不起楼上的了。

#20


100,5,0,0,5,0,1,0,1,5,1,1,0,11,0,5,5,10,
贴子回复次数大于跟给分次数 

这是什么回事啊?

#21


触发器一般是用来维护数据一致性,而不是用来维护业务逻辑。
存储过程一般用在大批量数据统计。

#22


大业务量当然得用存储过程了!

#1


1. “高手都说做项目都不用触发器,和存储过程.”并不正确。用触发器和存储过程可以极大地简化前端系统的开发,对数据一致性、完整性等很多方面都有好处。

2. 你的触发器不能建立是因为你写的SQL语法有错:
   delete grade where grade.stid = stuent.stid

   缺少From子句表明引用student表。看起来可以改成:
   delete grade where grade.stid in (select stid from student)

   看你的意思是不是想在删除了student中记录时同时删除子表grade中的纪录?如果是,你的语句就还有问题。由于你已经在grade中定义了外键stid,那么主表中的记录就不能这样删除,否则由于子表中同值记录的存在使得主表的删除操作失败。

3. 建议:取消在grade中定义的外键stid,建立如下的触发器:

   create trigger del_trigger on student
     for delete
   as

   delete grade where stid in (select stid form deleted)

   return

#2


我个人认为在数据库中用触发器和存储过程,可以大大减少数据的传输,也就提高了效率。再说在存储过程中修改程序,比前台修改方便多了!

#3


#4


************************************************************
************8        高手啊.再问一个问题啊.******************

在SQL里如果才能进行并发处理呢?
比如说,有一个网络售票系统,A站和B站的售票点,同时有一张从北京到南宁的票C出售.但是票且只能由一个人买得.假如也有两个人A和B同时都想买这张票,它们都同时点了这张票.怎么办?

//有例子,能给来看看吗?
或给个思路好吗?
分再加90我就这么多分了.
哪位高的分多的能不能捐一些给我呢?

#5


菜用存储过程来做肯定没问题.
再在存储过程中对c操作的时候加一把"派它锁".可以保证买票的问题.

#6


231yy我看不明白啊.说清楚些好吗?

#7


事务处理

#8


这样的话我的一百五也太好拿了吧.总我一百分我是给nononono(null,null) 的了

#9



  什么高手,胡说八道

#10


关于在SQL里如果才能进行并发处理的问题
你不用去担心,因为数据库本生就可以在修改数据或添加删除数据时他会锁定一条数据源,别的没办法修改的!
如果你要有个修改的优先级,就得自己来设定优先级!

#11


高手之高,不知是手高心低还是心低手高!

#12


关注楼主这个问题 在SQL里如果才能进行并发处理呢?

#13


我UP

#14


up

http://www.csdn.net/cnshare/soft/11/11463.shtm

#15


我up

#16


向 nononono(null,null) 学习。

#17


你用的是不是SQL Server数据库啊,你最好说明一下。
简单一点增加一个标识字段(表示这张票是不是已经被买掉了),更新的时间增加条件未被买掉的更新,最后去检查更新条数,如果更新条数大于说明这次买票成功,否则没有买到票。

--SQL Server的触发器在触发时根据操作类型的不同会创建一个或两个临时表inserted、deleted
--触发器只是一种特殊的存储过程,最好不用要不在调试或其它人在操作这张表时会造成很多麻繁
create trigger del_trigger 
on student
 for delete
as
delete grade where grade.stid = deleted.stid
go

#18


是的,我在联通出差的时候,看到联通的数据库从来就不用触发器的。

#19


结了。算了。有机会在问了。这么久都不结,都对不起楼上的了。

#20


100,5,0,0,5,0,1,0,1,5,1,1,0,11,0,5,5,10,
贴子回复次数大于跟给分次数 

这是什么回事啊?

#21


触发器一般是用来维护数据一致性,而不是用来维护业务逻辑。
存储过程一般用在大批量数据统计。

#22


大业务量当然得用存储过程了!