请问sql触发器insert触发器如何使用?
具体是这样的,我有两个表,一个是存储学生信息的,stu(Sname,Sid),还有一个是存储用户登陆信息的,user(Uname,Upassword),如何使用inser...
具体是这样的,我有两个表,一个是存储学生信息的,stu(Sname,Sid),还有一个是存储用户登陆信息的,user (Uname,Upassword),如何使用insert触发器在stu表中插入数据时,同时在user表中插入(Sid,Sid)?
展开
5个回答
展开全部
DML触发器有三类:
1, insert触发器;
2, update触发器;
3, delete触发器;
触发器的组成部分:
触发器的声明,指定触发器定时,事件,表名以类型
触发器的执行,PL/SQL块或对过程的调用
触发器的限制条件,通过where子句实现
类型:
应用程序触发器,前台开发工具提供的;
数据库触发器,定义在数据库内部由某种条件引发;分为:
DML触发器;
数据库级触发器;
替代触发器;
DML触发器组件:
1,触发器定时
2,触发器事件
3,表名
4, 触发器类型
5, When子句
6, 触发器主体
可创建触发器的对象:数据库表,数据库视图,用户模式,数据库实例
创建DML触发器:
Create [or replace] trigger [模式.]触发器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 条件
PL/SQL块
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
Insert触发器的创建:
create or replace trigger tg_insert
before insert on student
begin
dbms_output.put_line('insert trigger is chufa le .....');
end;
执行的效果:
SQL> insert into student
2 values(202,'dongqian','f');
insert trigger is chufa le .....
update表级触发器的例子:
create or replace trigger tg_updatestudent
after update on student
begin
dbms_output.put_line('update trigger is chufale .....');
end;
运行效果:
SQL> update student set se='f';
update trigger is chufale .....
已更新8行;
可见,表级触发器在更新了多行的情况下,只触发了一次;
1, insert触发器;
2, update触发器;
3, delete触发器;
触发器的组成部分:
触发器的声明,指定触发器定时,事件,表名以类型
触发器的执行,PL/SQL块或对过程的调用
触发器的限制条件,通过where子句实现
类型:
应用程序触发器,前台开发工具提供的;
数据库触发器,定义在数据库内部由某种条件引发;分为:
DML触发器;
数据库级触发器;
替代触发器;
DML触发器组件:
1,触发器定时
2,触发器事件
3,表名
4, 触发器类型
5, When子句
6, 触发器主体
可创建触发器的对象:数据库表,数据库视图,用户模式,数据库实例
创建DML触发器:
Create [or replace] trigger [模式.]触发器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 条件
PL/SQL块
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
Insert触发器的创建:
create or replace trigger tg_insert
before insert on student
begin
dbms_output.put_line('insert trigger is chufa le .....');
end;
执行的效果:
SQL> insert into student
2 values(202,'dongqian','f');
insert trigger is chufa le .....
update表级触发器的例子:
create or replace trigger tg_updatestudent
after update on student
begin
dbms_output.put_line('update trigger is chufale .....');
end;
运行效果:
SQL> update student set se='f';
update trigger is chufale .....
已更新8行;
可见,表级触发器在更新了多行的情况下,只触发了一次;
展开全部
步骤如下,请参考:
IF OBJECT_ID('tbl_qxt') IS NOT NULLbeginDROP TABLE tbl_qxt
end
GO
CREATE TABLE tbl_qxt
(ID int identity(1,1),CREATORID int,INSERTIME datetime,[COUNT] varchar(500))
if object_id('tbl_user') is not nullbegin
drop table tbl_user
end
go
create table tbl_user
(ID int identity(1,1),CREATORID int,USERNAME varchar(50),[PASSWORD] varchar(50))
开始加触发器:
if object_id('trigger1') is not null
begin
drop trigger trigger1
end
go
create trigger trigger1 on tbl_qxt after insert
as
begin
if exists(select 1 from tbl_user u inner join inserted i on u.CREATORID=i.CREATORID)
begin
print 1
update tbl_qxt set [COUNT]=cast(i.[COUNT] as varchar) +'【'+cast(u.USERNAME as varchar)+'】'
from inserted i inner join tbl_user u
on u.CREATORID=i.CREATORID
where tbl_qxt.ID in(select max(id) from tbl_qxt)
end
end
go
delete from tbl_user
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在sql server中使用
create trigger insert_stu on stu
for insert
as
insert into user(Uname,Upassword)
select sid,sid from inserted
在oracle中使用,默认密码为学生ID号
create trigger in_sert on stu
for insert
as
insert into user(Uname,Upassword) values (NEW:Sid,NEW:Sid)
create trigger insert_stu on stu
for insert
as
insert into user(Uname,Upassword)
select sid,sid from inserted
在oracle中使用,默认密码为学生ID号
create trigger in_sert on stu
for insert
as
insert into user(Uname,Upassword) values (NEW:Sid,NEW:Sid)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己可以尝试写下:
create trigger in_sert on stu
for insert
as
insert into user(id)
select sid from inserted
create trigger in_sert on stu
for insert
as
insert into user(id)
select sid from inserted
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create or replace trigger tib_stu
before insert on stu
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
insert into user values(:new.sid,:new.sid);
end;
before insert on stu
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
insert into user values(:new.sid,:new.sid);
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询