精华内容
下载资源
问答
  • select * from YLXZ_PERSONinsert into YLXZ_PERSON(name) VALUES('嘘嘘')DELETE from YLXZ_PERSON where name ='嘘嘘'update YLXZ_PERSON set id=NULL//创建序列CREATE SEQUENCE PERSON_sequenceINCREMENT BY 1 -- ...

    select * from YLXZ_PERSON

    insert into YLXZ_PERSON(name) VALUES('嘘嘘')

    DELETE from YLXZ_PERSON where name ='嘘嘘'

    update YLXZ_PERSON set id=NULL

    //创建序列

    CREATE SEQUENCE PERSON_sequence

    INCREMENT BY 1 -- 每次加几个

    START WITH 36 -- 从1开始计数

    NOMAXVALUE -- 不设置最大值

    NOCYCLE -- 一直累加,不循环

    NOCACHE -- 不建缓冲区

    //创建触发器

    CREATE TRIGGER PERSON_trigger

    BEFORE INSERT ON YLXZ_PERSON

    FOR EACH ROW

    WHEN (new.id is null) --只有在id为空时,启动该触发器生成id号

    begin

    select PERSON_sequence.nextval into :new.id from sys.dual;

    end;

    DROP TRIGGER PERSON_trigger  --删除触发器

    DROP SEQUENCE PERSON_sequence  --删除序列

    展开全文
  • pg数据库创建触发器

    千次阅读 2020-06-09 10:58:05
    2、创建触发器 步骤: 先为触发器建一个执行函数,此函数的返回类型为触发器类型 trigger; 然后即可创建相应的触发器创建触发器的语法: CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD...

    1、什么是触发器

        触发器是一种由事件自动触发执行的特殊存储过程,这些事件可以是对一个表进行 INSERT、UPDATE、DELETE 等操作。

    触发器经常用于加强数据的完整性约束和业务规则上的约束等。

    2、创建触发器

    步骤:

    先为触发器建一个执行函数,此函数的返回类型为触发器类型 trigger;

    然后即可创建相应的触发器。

    创建触发器的语法:

    CREATE [ CONSTRAINT ] TRIGGER name 
    { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ]}
    ON table_name
    [ FROM referenced_table_name ]
    { NOT DEFERRABLE | [ DEFEREABLE ] { IINITIALLY IMMEDIATE | INITIALLY DEFERED} }
    FOR [ EACH ] { ROW | STATEMENT }
    [ WHEN { condition }]
    EXECUTE PROCEDURE function_name ( arguments )

    语法说明:

    CREATE                              --创建触发器 后面为自定义的触发器名称
    BEFORE | AFTER               --可以选 BEFORE 或 AFTER ,指触发器在附着表操作的之前还是之后触发
    INSERT OR DELETE          --触发事件,可以在 INSERT | DELETE | UPDATE(OF column ...) 中单选或多选,多选只能用OR连                                                 接,不能用ADD
    ON table_name                   --哪张表改变时会触发触发器
    ON DESIGNATED_POINT  --附着表,或视图,触发器只能附着在一张表/视图上
    FOR EACH ROW                --FOR EACH ROW选项说明触发器为行触发器。还有可以有语句触发器,二者区别是触发次数以行                                                 为单位还是语句为单位

    3、示例

    例如当删除学生表(student)中的一条记录时,把这个学生在成绩表 (score) 中的成绩记录也删除掉,这时就可以使用触发器。

    先建触发器的执行函数:

    CREATE OR REPLEASE FUNCTION student_delete_trigger_fun()
    returns trigger as $$
    begin
        delete from score where student_no = old.student_no;
        return old;
    end;
    $$
    language plpgsql;

    再创建这个触发器:

    CREATE TRIGGER delete_student_trigger
    after delete on student
    for each row execute procedure student_delete_trigger_fun();

    实现:当你删除这个学生的记录时,改学生关联在成绩表的数据也被删除。

    4、语句级和行级触发器

    PostgreSQL中的触发器可以分为:语句级触发器与行级触发器。

    语句级触发器:

    CREATE TRIGGER log_trigger 
        AFTER INSERT OR DELETE OR UPDATE ON student
        FOR STATEMENT EXECUTE PROCEDURE student_log_trigger();

    语句级触发器执行每个SQL时,只执行一次 

    行级触发器:

    CREATE TRIGGER log_trigger 
         AFTER INSERT OR DELETE OR UPDATE ON student
        FOR EACH ROW EXECUTE PROCEDURE student_log_trigger();

    行级触发器每行都会执行一次。

    而当SQL语句没有更新实际的行时,语句触发器也会被触发,而行级触发器不会被触发。

    5、其他相关

    禁用或启用触发器,可用以下命令:ALTER TRIGGER trigger_name DISABLE/ENABLE;

    禁用某个表上的所有触发器,可用如下命令:ALTER TABLE table_name DISABLE ALL TRIGGERS.

    展开全文
  • oracle创建与常见问题Oracle DBA Studio 工具里面就能创建触发器CREATE TRIGGER名称CREATE TRIGGER — 创建一个新触发器语法CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }ON table FOR E...

    oracle创建与常见问题

    Oracle DBA Studio 工具里面就能创建触发器

    CREATE TRIGGER

    名称

    CREATE TRIGGER — 创建一个新触发器

    语法

    CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }

    ON table FOR EACH { ROW | STATEMENT }

    EXECUTE PROCEDURE func ( arguments )

    输入

    name

    触发器名称.

    table

    表名称.

    event

    INSERT,DELETE 或 UPDATE 之一.

    funcname

    一个用户提供的函数.

    输出

    CREATE

    如果触发器成功创建,返回此信息.

    描述

    CREATE TRIGGER 将向现有中增加一个新的触发器.触发器将与表 table 相联并且将执行声明的函数 funcname.

    触发器可以声明为在对记录进行操作之前(在检查约束之前和 INSERT,UPDATE 或 DELETE 执行前)或之后(在检查约束之后和完成了 INSERT,UPDATE 或 DELETE 操作)触发.如果触发器在事件之前,触发器可能略过当前记录的操作或改变被插入的(当前)记录(只对 INSERT 和 UPDATE 操作有效).如果触发器在事件之后,所有更改,包括最后的插入,更新或删除对触发器都是"可见"的.

    请参考 PostgreSQL 程序员手册 中SPI 和触发器章节获取更多信息.

    注意

    CREATE TRIGGER 是一个 Postgres 语言扩展.

    只有表所有者可以就此表创建一个触发器.

    在当前的版本(v7.0),STATEMENT 触发器还没有实现.

    请参考 DROP TRIGGER 获取如何删除触发器的信息.

    用法

    在插入或更新表 films 之前检查一下声明的分销商代码是否存在于 distributors 表中:

    CREATE TRIGGER if_dist_exists

    BEFORE INSERT OR UPDATE ON films FOR EACH ROW

    EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');

    在删除或更新一个分销商的内容之前,将所有记录移到表 films 中(译注:好象与例子意义不同):

    CREATE TRIGGER if_film_exists

    BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW

    EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');

    兼容性

    SQL92

    在 SQL92 里没有 CREATE TRIGGER 语句.

    上面第二个例子可以使用一个 FOREIGN KEY 约束实现:

    CREATE TABLE distributors (

    did DECIMAL(3),

    name VARCHAR(40),

    CONSTRAINT if_film_exists

    FOREIGN KEY(did) REFERENCES films

    ON UPDATE CASCADE ON DELETE CASCADE

    );

    实例

    create trigger tri_emp

    after insert on employees

    for each row

    insert into new values(:new.sno,:new.sname,:new.sex,:new.depart)

    --------------

    create trigger tri_emp_delete

    after delete on employees

    for each row

    delete from new where sno=:old.sno

    --------------

    create trigger tri_emp_update

    after update on employees

    for each row

    begin

    delete from new where sno=:old.sno;

    insert into new values(:new.sno,:new.sname,:new.sex,:new.depart);

    end;

    --------------

    注意;的使用,如果在begin和end子句中有多条语句的话,每条句子后面都应该有一个分号

    最近最一个oracle的项目,需要自定义生成触发器,但是在组装的SQL语句生成的触发器却始终出现错误。将生产的SQL语句拿到SQLPLUS去执行(oracle 10g),出现

    错误:Warning: Trigger created with compilation errors.

    进到企业管理器去查看触发器,会发现如下错误:

    “ Line # = 2 Column # = 128 Error Text = PL/SQL: ORA-00984: column not allowed here

    Line # = 2 Column # = 1 Error Text = PL/SQL: SQL Statement ignored

    确实不知道是什么错误,通过网络搜索“ column not allowed here”,有人说是字符(char)、整形的

    类型转换问题,但这个问题如何解决呢?

    测试用表使用了两张字段相同的表,分别命名为userinfo_old,uerinfo_new.

    SQL生成的触发器如下:

    create trigger test_trigger

    after insert on userinfo_old

    for each row

    begin

    insert into userinfo_new values (userinfo_old.userid,userinfo_old.username,userinfo_old.userpass,userinfo_old.sex,userinfo_old.userqq);

    end; 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

    展开全文
  • 教程贴士:本教程为大家介绍SQL Server触发器创建删除、修改、查看方法。  一:触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以...

    教程贴士:本教程为大家介绍SQL Server触发器创建、删除、修改、查看方法。

     

      一:触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。

      二:SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护,它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后,与该触发器相关的这两个表也被删除。

      Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。

      Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。

      三:Instead of 和 After触发器

      SQL Server2000提供了两种触发器:Instead of 和After 触发器。这两种触发器的差别在于他们被激活的同:

      Instead of触发器用于替代引起触发器执行的T-SQL语句。除表之外,Instead of 触发器也可以用于视图,用来扩展视图可以支持的更新操作。

      After触发器在一个Insert,Update或Deleted语句之后执行,进行约束检查等动作都在After触发器被激活之前发生。After触发器只能用于表。

      一个表或视图的每一个修改动作(insert,update和delete)都可以有一个instead of 触发器,一个表的每个修改动作都可以有多个After触发器。

      四:触发器的执行过程

      如果一个Insert﹑update或者delete语句违反了约束,那幺After触发器不会执行,因为对约束的检查是在After触发器被激动之前发生的。所以After触发器不能超越约束。

      Instead of 触发器可以取代激发它的操作来执行。它在Inserted表和Deleted表刚刚建立,其它任何操作还没有发生时被执行。因为Instead of 触发器在约束之前执行,所以它可以对约束进行一些预处理。

      五:使用T-SQL语句来创建触发器

      基本语句如下:

      create trigger trigger_name

      on {table_name | view_name}

      {for | After | Instead of }

      [ insert, update,delete ]

      as

      sql_statement

      六:删除触发器:

      基本语句如下:

      drop trigger trigger_name

      七:查看数据库中已有触发器:

      -- 查看数据库已有触发器

      use jxcSoftware

      go

      select * from sysobjects where xtype='TR'

      -- 查看单个触发器

      exec sp_helptext '触发器名'

      八:修改触发器:

      基本语句如下:

      alter trigger trigger_name

      on {table_name | view_name}

      {for | After | Instead of }

      [ insert, update,delete ]

      as

      sql_statement

      九:相关示例:

      1:在Orders表中建立触发器,当向Orders表中插入一条订单记录时,检查goods表的货品状态status是否为1(正在整理),是,则不能往Orders表加入该订单。

      create trigger orderinsert

      on orders

      after insert

      as

      if (select status from goods,inserted

      where goods.name=inserted.goodsname)=1

      begin

      print 'the goods is being processed'

      print 'the order cannot be committed'

      rollback transaction --回滚,避免加入

      end

      2:在Orders表建立一个插入触发器,在添加一条订单时,减少Goods表相应的货品记录中的库存。

      create trigger orderinsert1

      on orders

      after insert

      as

      update goods set storage=storage-inserted.quantity

      from goods,inserted

      where

      goods.name=inserted.goodsname

      3:在Goods表建立删除触发器,实现Goods表和Orders表的级联删除。

      create trigger goodsdelete

      on goods

      after delete

      as

      delete from orders

      where goodsname in

      (select name from deleted)

      4:在Orders表建立一个更新触发器,监视Orders表的订单日期(OrderDate)列,使其不能手工修改.

      create trigger orderdateupdate

      on orders

      after update

      as

      if update(orderdate)

      begin

      raiserror(' orderdate cannot be modified',10,1)

      rollback transaction

      end

      5:在Orders表建立一个插入触发器,保证向Orders表插入的货品名必须要在Goods表中一定存在。

      create trigger orderinsert3

      on orders

      after insert

      as

      if (select count(*) from goods,inserted where goods.name=inserted.goodsname)=0

      begin

      print ' no entry in goods for this order'

      rollback transaction

      end

      6:Orders表建立一个插入触发器,保证向Orders表插入的货品信息要在Order表中添加

      alter trigger addOrder

      on Orders

      for insert

      as

      insert into Order

      select inserted.Id, inserted.goodName,inserted.Number from inserted

     

    十.经典实例

    在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 
          常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 

          我为什么要使用触发器?比如,这么两个表: 

          Create Table Student(              --学生表 
            StudentID int primary key,       --学号 
            .... 
           ) 

          Create Table BorrowRecord(               --学生借书记录表 
            BorrowRecord   int identity(1,1),       --流水号   
            StudentID      int ,                    --学号 
            BorrowDate     datetime,                --借出时间 
            ReturnDAte     Datetime,                --归还时间 
            ... 
          ) 

         用到的功能有: 
            1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 
            2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 
         等等。 

         这时候可以用到触发器。对于1,创建一个Update触发器: 

         Create Trigger truStudent 
           On Student                         --在Student表中创建触发器 
           for Update                          --为什么事件触发 
         As                                        --事件触发后所要做的事情 
           if Update(StudentID)            
           begin 

             Update BorrowRecord 
               Set StudentID=i.StudentID 
               From BorrowRecord br , Deleted   d ,Inserted i      --Deleted和Inserted临时表 
               Where br.StudentID=d.StudentID 

           end        
                     
         理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 
         一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是: 
                                 虚拟表Inserted                     虚拟表Deleted 

    在表记录新增时     存放新增的记录                         不存储记录 
             修改时           存放用来更新的新记录                   存放更新前的记录 
             删除时           不存储记录                             存放被删除的记录 


         一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。 

         对于2,创建一个Delete触发器 
         Create trigger trdStudent 
           On Student 
           for Delete 
         As 
           Delete BorrowRecord 
             From BorrowRecord br , Delted d 
             Where br.StudentID=d.StudentID 

         从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。 

    十一.触发器语法

    CREATE TRIGGER trigger_name 
    ON { table | view } 
    [ WITH ENCRYPTION ] --用于加密触发器 

    { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } 
    [ WITH APPEND ] 
    [ NOT FOR REPLICATION ] 
    AS 
    [ { IF UPDATE ( column ) 
    [ { AND | OR } UPDATE ( column ) ] 
    [ ...n ] 
    | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) 
    { comparison_operator } column_bitmask [ ...n ] 
    } ] 
    sql_statement [ ...n ] 



    关于触发器,还应该注意 :
    (1)、DELETE 触发器不能捕获 TRUNCATE TABLE 语句。 
    (2)、触发器中不允许以下 Transact-SQL 语句: 
    ALTER DATABASE CREATE DATABASE DISK INIT 
    DISK RESIZE DROP DATABASE LOAD DATABASE 
    LOAD LOG RECONFIGURE RESTORE DATABASE 
    RESTORE LOG 
    (3)、触发器最多可以嵌套 32 层。 
     

    展开全文
  • MySQL的触发器使用实例: 解决 触发器被触发后,向表里插入数据时判断该条记录是否存在,如果存在则...用简单的手动建表的办法,创建两个表。我用这两个表来介绍触发器该怎么使用。 操作表(触发器所在的表): tab...
  • ITEM_CODE_ORDERS VARCHAR2(20) ORDER_QUANTITY NUMBER(4,0) ORDER_UNIT VARCHAR2(5) UNIT_PRICE NUMBER(38,5) 我想基于order_unit创建一个触发器来计算unit_price我尝试了这个触发器,但它没有用 create or ...
  • Oracle DBA Studio 工具里面就能创建触发器CREATE TRIGGER名称CREATE TRIGGER — 创建一个新触发器语法CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }ON table FOR EACH { ROW | STATEMENT }EXECUTE ...
  • SQL Server 创建触发器(trigger)

    千次阅读 2018-07-11 15:33:41
    例如:update、insert、delete这些操作的时候,系统自动调用执行该表上对应的触发器触发器分类:1、DML( 数据操纵语言 Data Manipulation Language)触发器:是指触发器在数据库中发生 DML 事件时将启用。DML...
  • 本博文源于mysql基础,旨在对触发器创建/修改删除做学习与相应练习。
  • MySQL如何创建触发器

    2019-11-22 13:53:20
    例如,可以在books.author_code 列上生成一个插入触发器,如果新值与auths.author_code列中的某值不匹配时,插入被回退。 5.同步实时地复制表中的数据。 6.自动计算数据值,如果数据的值达到了一定的要求,则...
  • 使用navicat 创建触发器, 直接截图: 禁止修改触发器 begin if new.money_id!=old.money_id or new.userid!=old.userid or new.money_num!=old.money_num or new.opt_type!=old.opt_type or new.add_time!=old....
  • mysql创建触发器

    2020-12-18 18:19:07
    我们都知道mysql最后事务提交后,数据是保存到磁盘上的,那么每次在insert,delete,update时候旧数据和新数据,在内存中生成临时的行数据,分别叫old和new。例如要inset插入一条数据的时候,...
  • MySQL触发器资料整理创建触发器及查看、删除触发器 一、什么是触发器 1、触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是通过事件来触发,比如对一个表进行操作(insert,delete,...
  • postgresql数据库在创建表的时候不会像oracle一样,有地方表的创建时间,pg并不记录表的创建时间,只在log日志中记录,如果是好久之前的日志,刚好已经被清理掉,那么要审计或者通过表的创建时间来排查问题...
  • 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 ...8.3删除和使用触发器 8.4触发器和数据字典 8.5数据库触发器的应用举例 8.6 触发器的查看 8....
  • create table test(id varchar(18), --流水号,日期(8位)+时间(4位)+流水号(4位)name varchar(10) --其他字段)go--创建生成流水号的触发器create trigger t_inserton testINSTEAD OF insertasdeclare @id varchar(18)...
  • MySQL中的触发器(trigger) 触发器(trigger)和存储过程类似,也是代码片段的集合,触发器是MySQL用来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,...
  • USE [HengliReportWord] GO /****** Object: Trigger [dbo].[CreateUpdates] Script Date: 12/23/2020 11:14:...ALTER trigger [dbo].[CreateUpdates] --如果是创建就使用Create on [dbo].[ReportMain] after Update --
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • 当对一张表,进行更新、删除、插入等操作时,需要对另外一张表进行改动操作或者对本身要有其他操作。这时就需要创建sql触发器 但是有时我们需要监控,指定列的更新,只有当某一列更新 或者 只有当某一列更新为某一...
  • 今天做Java Web的课设,但是我需要用触发器,使得在我插入或修改当前表的unit字段和mount字段时候计算这两个字段的乘积并自动插入当前这个表的allValue字段中。 但是因为数据库是去年学的了,基本已经忘光了。。现在...
  • 数据库原理实验报告s11-数据库触发器创建.doc 数据库管理系统SQLSERVER实验报告第1页2011年5月4日实验11数据库触发器的建立实验日期和时间20141128实验室软件工程室班级12计科3学号20124122姓名张翔实验环境1硬件...
  • SQL Server数据库——触发器创建

    千次阅读 2018-06-04 13:57:08
    潇小白本学期刚学期数据库,下面分享一下我的成果,欢迎大家来讨论哦!...(用两种触发器做,并比较结果,截图) create trigger trigger_sage on student after insert,update as if exists (select * from i...
  • 使用SQLyog创建简单的触发器

    千次阅读 2017-01-09 11:05:00
    使用SQLyog创建简单的触发器 第一,打开SQLyog,右键创建触发器 第二, DELIMITER $$ CREATE / [DEFINER = { user | CURRENT_USER }] / TRIGGER t_afterinsert_on_tab1 BEFORE DELETE ON bfs_admin FOR ...
  • 触发器

    2021-03-15 09:54:47
    触发器是和表关联的特殊的存储过程,可以在插入,删除或修改表中的数据时触发执行,,比数据库本身标准的功能有更精细和更复杂的数据控制能力。 触发器作用? 触发器的优点: 安全性:可以基于数据库的值使用户...
  • 第二步 写Java程序,生成创建触发器sql   package util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileWriter; import java.io....
  • 你应当了解的是,当这个应用程序进行大规模地记录插入、更新或删除时要当心,因为它可能耗费大量的内存。  像你从下面看到的一样,这次我们在前面那个例子的基础上稍加调整,引入了一个游标,对该插入表的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,429
精华内容 18,971
关键字:

创建删除触发器会生成