精华内容
下载资源
问答
  • 那以如何在VB+SQLSERVER数据库中创建触发器呢?本例将告诉你答案,如果你是VB6.0编程新手,想了解相关知识,那就更应该看看哦。  创建触发器的语句示例:update k set k.员工编号=j.员工编号,k.员工姓名=j.员工姓名...
  • 今天我们再来学习MySQL数据库中一个重要的知识点,触发器 ...读完之后,我们呢来看看这个触发器如何创建、调用、查看、删除。 创建触发器 创建单个执行语句触发器 创建触发器,我们需要用到一个关键词:TR

    今天我们再来学习MySQL数据库中一个重要的知识点,触发器

    触发器

    第一步,我们先来认识一下这个触发器是什么东西,废话不多说,直接百度百科

    可以看到有很大一段话,我建议大家多读几遍,这里呢,我用红线去画住重点,触发器就相当于我们的闹钟一样,每当到了早上的八点或者八点半准时叫我们起床。其中触发的事件就是时间,好比现在到了早上的8:00了,然后闹钟就响了。

    读完之后,我们呢来看看这个触发器如何创建、调用、查看、删除。

    创建触发器

    创建单个执行语句触发器

    创建触发器,我们需要用到一个关键词:TRIGGER,下面是完整命令:

    CREATE TRIGGER 触发器名称 BEFORE(之前) | AFTER(之后) 触发事件
    ON 表名 FOR EACH ROW 执行语句;

    嗯,大概就这样,我来解释一下,创建一个TRIGGER,名字叫xxx,bffore就是在这个触发事件之前,做什么什么操作,after就是之后,触发事件呢有三种,insert、update、delete,on后面跟着的是作用的表,FOR EACH ROW 就是作用到每一行,再往后就是具体执行什么语句了。

    我们现在来弄一个这个触发器,大家感受一下。

    我们再创建一个表,叫 t_log 日志表,用来存放日志的,然后弄一个id,一个content,一个日期就可以了。

    create table t_log(
    	id     int  not null   PRIMARY key AUTO_INCREMENT,
    	content  varchar(50)  not null,
    	createDt  datetime
    )engine= INNODB charset = utf8

    创建好之后,我们来开始弄触发器。

    CREATE TRIGGER wirte_log_insert_student after insert on t_student 
    FOR EACH ROW insert into t_log values(null, CONCAT('刚刚新增加了一个',new.name,'的学生'), NOW());
    

    我来给大家解释一下这个命令,前面的我已经说了,就不说了,主要的是后面的这个insert into t_log

    首先是这个CONCAT函数,这个函数是用来做字符串拼接的,可以使用逗号隔开,能填好多好多,但是不要超过了这个content的大小,我们给的是50个字。

    然后就是这个new.name,这个是一个过度变量

    过度变量

    过度变量有两个一个是NEW,一个是OLD。

    NEW呢就是用在INSERT这种触发事件,这里的NEW就是指代的我们刚刚新插入的这个表的其中一行数据,我们可以通过NEW.表中的属性,然后获取到具体的值。

    OLD呢,就是用在UPDATE、DELETE这两个触发事件的过度变量,用法同NEW一样。

    接着就是最后的NOW(),这个就是当前时间。

    然后我们创建一下。

    是OK的啊,创建好之后,我们来测试一下。

    我们插入了一条数据啊,我们来看一下,这个log表中是不是也有一条数据。

    是OK的没有错啊,说明我们的触发器生效了。

    创建多个执行语句触发器

    创建多个执行语句是这样写的

    delimiter 分隔符号(自己定义)
    create trigger 触发器名称 bffer 或者 after 触发事件
    on xxx表 for each row 
        begin
           要操作的SQL1;
           要操作的SQL2;
        end
    分隔符号
    delimiter;

    这里需要用到两个新东西,一个是这个delimiter,这个东西是做一个划界用的,因为SQL遇到分号啊,就直接执行完成就提交了,我们不能让他提交,不然多条SQL的执行语句后面的就用不到了,而且可能还会报错,所以需要用一下它。

    然后就是begin end,这个就是一个开始结束,用法和上面的这个delimiter类似,也是做区域划分的。

    知道怎么去创建之后,我们来弄一个多条执行语句的触发器。

    我们在删除学生的时候,添加一个log,顺便再去添加一个食物啊,因为举不到合适的例子,就这样吧。

    现在我们呢,删除一个学生,就把刚刚添加的内个  触发器  这个学生给他删除了。

    是不是删除了?然后我们再来看看日志表

    然后再看一下食物表

    也是OK的啊。

    查看触发器

    查看触发器我们使用命令

    SHOW TRIGGERS;

    我们就用这个命令去查看一下刚刚创建的两个触发器。

    当然啊,一个数据库定义的触发器不会太多啊,我是没有遇到定义一大堆的触发器的,除非是业务需要啊。

    删除触发器

    然后是删除,删除就好说了,直接上命令

    DROP TRIGGER 触发器名字

    我们来把我们刚刚创建的给他删除了。

    我们再来看一下,还有没有触发器了。

    很好啊,屁也没有了。

     

    今天就这么多,大家一定要好好练习一下,多练几遍,有不会的加我QQ:2100363119。

    明天说存储过程。

    展开全文
  • 谁帮我写段MYSQL语句,创建触发器,功能为:在jzgb表插入一条记录时候,如果“院处号”值为具体学院名称的话,则设置为ycb表该学院名称对应的“院处号”,如何ycb不存在插入的学院名称,则设置为null。...

    谁帮我写段MYSQL语句,创建个触发器,功能为:在jzgb表中插入一条记录时候,如果“院处号”值为具体学院名称的话,则设置为ycb表中该学院名称对应的“院处号”,如何ycb中不存在插入的学院名称,则设置为null。
    这是jzgb表
    这是ycb表

    展开全文
  • 一、什么是触发器?...二、如何创建触发器 create trigger saynewemp after insert on emp declare begin dbms_output.put_line(‘成功插入新员工’); end; / 三、触发器的应用场景 1、复杂的安全性检查 2、数据确

    一、什么是触发器?

    1、概念

    数据库触发器是一个与表相关联的、存储的PL/SQL程序。

    2、作用

    每当一个特定的数据操作语句(insert、update、delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。

    二、如何创建触发器

    create trigger saynewemp
    after insert
    on emp
    declare
    begin
    	dbms_output.put_line(‘成功插入新员工’);
    end;
    /
    

    三、触发器的应用场景

    1、复杂的安全性检查
    2、数据确认
    3、实现数据库审计功能
    4、完成数据的备份和同步

    四、触发器的类型

    1、行级触发器(针对是行)

    • 触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量,识别值的状态。

    2、语句级触发器(针对是表)

    • 在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。

    五、案例

    1、触发器案例一:复杂的安全性检查

    禁止在非工作时间插入数据

    --触发器应用场最1:实施复杂的安全性检查
    --禁止在非工作时间插入新员工
    /*
    1.周末:
    	select to_char(sysdate,'day') from dual;
    	->to_char(sysdate,'day') in ('星期六', '星期日')
    2、上班前,下班后:
    	to_number(to_char(sysdate,'hh24')) not between 9 and 18
    	->to_number(to_char(sysdate,'hh24')) from dual; 
    */
    create or replace trigger securityemp
    before insert
    on emp
    begin
    	if to_char (sysdate,'day') in ('星期六','星期日') or
    		to_number(to_char(sysdate,'hh24')) not between 9 and 18 then
    		--禁止insert员工,raise_application_error(错误的代码<-20000-20999>. '提示信息')应用层抛出错误函数
    		raise_application_error(-20001, '禁止在非工作时间插入员工');
    	end if;
    end;
    /
    

    在这里插入图片描述

    insert into emp(empno,ename,sal,deptno)
    values (1001, 'Tom', 3000,10);
    

    在这里插入图片描述
    因为我测试的时候是星期一,所以他能插入新员工。弄到这里的时候差点怀疑人生
    在这里插入图片描述

    2、触发器案例二:数据的确认

    涨工资不能越涨越少

    --触发器应用场最2:数据的确认
    --涨后的薪水不能少于涨前的薪水
    /*
    1、:o1d和:new代表同一条记录
    2、:old表示操作该行之前,这一行的值
       :new表示操作该行之后,这一行的值
    */
    create or replace trigger checksalary
    before update
    on emp
    for each row
    begin
    	if :new.sal < :old.sal then
    		raise_application_error(-20002, '涨后的薪水不能少于涨前的薪水'||:new.sal||'涨前的薪水'||:old.sal);
    	end if;
    end;
    /
    

    在这里插入图片描述

    update emp set sal = sal - 1 where empno = 7839;
    

    在这里插入图片描述

    3、触发器案例三:数据库审计

    创建基于值的触发器

    /*
    	触发器应用场景3:数据库的审计--->基于值的审计功能
    	给员工涨工资,当涨后的薪水超过6000块钱时,审计该员工的信息
    */
    --创建表,用于保存审计信息
    create table audit_info
    (
    	in formation varchar2(200)
    );
    create or replace trigger do_audit_emp_salary
    after update
    on emp
    for each row
    begin
    	--当涨后的薪水大于6000,插入审计信息
    	if :new.sal > 6000 then
    		insert into audit_info values(:new. empno||' '||:new.ename||' '|| :new.sal);
    	end if;
    end;
    /
    

    因为我的audit_info表已经存在,所以提示错误
    在这里插入图片描述

    update emp set sal = sal + 2000;
    

    在这里插入图片描述
    虽然上面提示已经更新,但打开表里面又没有数据:
    在这里插入图片描述
    所以更新完数据后要提交:
    在这里插入图片描述
    然后刷新一下表:
    在这里插入图片描述

    4、触发器案例四:数据的备份和同步

    create table emp_back as select * from emp;
    
    /*
    触发器应用场景四:数据的备份和同步
    当给员工涨完工资后,自动备份新的工资到备份表中
    */
    create or replace trigger sync_salary
    after update
    on emp
    for each row
    begin
    	--当主表更新后,自动更新备份表
    	update emp_back set sal=:new.sal where empno= :new.empno;
    end;
    /
    

    在这里插入图片描述
    主表:
    在这里插入图片描述
    备份表:
    在这里插入图片描述
    执行下面的代码:

    update emp set sal = sal +10 where empno=7839;
    

    在这里插入图片描述
    执行完后:备份表随着主表同时更新
    主表:
    在这里插入图片描述
    备份表:
    在这里插入图片描述

    六、总结

    • 数据库触发器是一个与表相关联的、存储的PL/SQL程序。
    • 触发器的应用实践。
    展开全文
  • 在查询分析器运行: use 数据库名goselect * from sysobjects where xtype='TR' ...SQL 触发器创建一个简单的触发器 SQL 触发器-重命名触发器 SQL 触发器-删除触发器 SQL 触发器-触发...
    展开全文
  • 做项目过程,遇到需要建立触发器,实现临时表一新增数据,就将该数据新增到正式表
  • 一个或多个数据库触发器将事件插入到EVENTS表,该表由发布事件的单独进程轮询。 关联模式 事件驱动的体系结构模式创建了对此模式的需求。 事件溯源是一种替代模式 转载于:...
  • 在某项目,我们只允许一...如果登录名login_test已经创建了一个用户会话,登录触发器将拒绝由该登录名启动的SQL Server登录尝试。 USE master --只有在master 数据库才可以对登录名赋权 GO CREATE LOGIN login
  • Oracle数据库 -- 触发器

    2017-02-03 15:43:53
    什么是触发器触发器是一个特殊的存储过程 数据库触发器是一个与表相关联的、存储的PL/SQL程序。 触发器的作用:每当一个特定的数据操作语句(insert、update、delete)在...如何创建触发器: create tigger sayn
  • 下面将分别介绍在MS SQLServer 中如何用SQL Server 管理工具Enterprise Manager 和Transaction_SQL 来创建触发器。在创建触发器以前必须考虑到以下几个方面: CREATE TRIGGER 语句必须是批处理的第一个语句; 表的...
  • 创建一个追踪客户端IP地址的触发器: SQL>create or replace trigger on_logon_trigger  after logon on database  begin dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));  ...
  • 在上一篇文章中,我们知道了如何获取Oracle数据库中某个用户下的所有表、索引、约束、触发器创建脚本?那么对于数据库中特定的某张表而言,又该如何获取建表语句、及索引、约束、外键约束、触发器、对象权限的创建...
  • mysql数据库如何创建uuid通过触发器创建uuid 通过触发器创建uuid mysql使用UUID()创建uuid 命令行新增触发器操作: delimiter // CREATE TRIGGER 触发器名称 BEFORE(BEFORE执行操作前,AFTER执行操作后) UPDATE...
  • SQL server 数据库触发器如何使用!!! 触发器的概述 触发器是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是当某一事件发生时触发,例如当表执行deletet insert update时就会被执行。...
  • 在Oracle数据库中如何快速获取某个用户下的所有表、索引、约束及触发器创建SQL语句呢?本文给出一个简单的示例脚本,经过测试,除位于回收站下的对象及只读视图的约束语句不能获取,其它对象基本均可获取CREATE...
  • 我在sqlite写了一个触发器,是可以使用并且有效的,但是写在QT上运行的时候发现没有作用,然后我用sqlite打开QT工程创建数据库的时候,发现触发器根本没有被创建。小白一枚,有点迷惑,希望能得到各位大佬的建议 ...
  • 数据库的操作,在编写sql语句的时候,我们可能会用到函数以及触发器等的操作来简化我们的工作。 在这片文章,也和我以前的博文一样,不是纯粹的理论讲解,而是采用的是案例的方式进行笔记的记录说明。还是...
  • ###需求:我现在需要创建一个触发器,进行数据更新,具体要求如下: 现有数据表TEST1、TEST2两个数据表,表字段若干, 两表关联字段为TEST1.A=TEST2.A。 表TEST1 B 字段原先有数据, C字段是没有数据的。 ...
  •  通过创建DDL触发器,记录数据库对象的增删改的操作,能够在数据库出现问题时,便于跟踪、定位问题。本文通过实例介绍了如何使用DDL触发器。  使用 EVENTDATA 函数,可以捕获有关激发 DDL 触发器的事件的信息...
  • F(x) F(x)向ActiveRecord::Migration添加方法以创建和管理Rails数据库函数和触发器。 使用F(x),您可以将SQL函数和触发器的功能...太好了,如何创建触发器和函数? 对于要调用uppercase_users_name的函数

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 425
精华内容 170
关键字:

数据库中触发器如何创建