精华内容
下载资源
问答
  • 软件测试mysql面试题:什么是触发器触发器的使用场景有哪些?
    2022-04-18 13:28:56

    什么是触发器?触发器的使用场景有哪些?

    触发器是用户定义在关系表上的一类由事件驱动的特殊的存储过程。触发器是指一段代码,当触发某个事件时,自动执行这些代码。

    使用场景

    可以通过数据库中的相关表实现级联更改。

    实时监控某张表中的某个字段的更改而需要做出相应的处理。

    例如可以生成某些业务的编号。

    注意不要滥用,否则会造成数据库及应用程序的维护困难。

    大家需要牢记以上基础知识点,重点是理解数据类型CHAR和VARCHAR的差异,表存储引擎InnoDB和MyISAM的区别。


    个人简介

    我是一名测试兼开发工程师,目前25K,目前做的是无人驾驶,欢迎和大家一起交流测试技术,一起高薪就业,我们还有一起打妖怪的群哦,还有面试题小程序哦

    更多相关内容
  • 一、触发器应用 如何利用JK触发器,在没有震荡的情况下依旧能够判断电路信号。本设计思想取自555定时器的构想,通过增加一个741运放与电容电阻,使其在无震荡输入的情况下还可以判断输入源频率。 二、测速说明 ...
  • KJ006主要适用于交流供电的双向可控硅或反并联可控硅线路的交流相位控制。能由交 流电网直接供电并无需外加同步信号、输出变压器和直流工作电源,并且能直接与与可控硅控制极直接耦合触发。具有锯齿波线性好、移相...
  • KC06可控硅移相触发器主要适用于交流电网直接供电的双向可控硅或反并联可控硅线路的交流相位控制。能由交流电网直接供电并无需外加同步、输出变压器和直流工作电源,并且能直接用于可控硅控制及耦合触发。具有锯齿波...
  • 在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两种触发器类型(DML触发器&DDL触发器)和After触发器&InsteadOf触发器应用不同,开始说起它们,然后是说与事务有关的故事。如果,你有什么建议和...
  • 在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两种触发器类型(DML触发器 & DDL触发器)和After触发器 & Instead Of 触发器应用不同,开始说起它们,然后是说与事务有关的故事。如果,你有什么...
  • KC09的引脚排列和KC04完全相同,可以互换使用。由于KC09内部采用了反向阻断四级硅晶闸管作脉冲记忆,提高了抗干扰能力和触发脉冲的前沿陡度,脉冲的宽度有较大的调节...同步电压:任意值(一般交流30V)。同步输入端允
  • sakila数据库触发器的理解 基于sakila的触发器的设计 PDF中包括: 1. 观察 sakila.mwb 并回答问题 1.1图中共有几个 View 1.2分析以下 3 个视图,回答以下...PDF中内容仅包含个人意见,欢迎交流和讨论,如有错误还望指出
  • MySQL存储过程与触发器(应用场景)

    千次阅读 2017-11-04 11:43:04
    https://t.zsxq.com/F2JAIiu (搜索:php技术交流与分享,加入星球,就可以一直了解您想要的知识点) 二、 触发器 触发器作用:当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成。 ~~语法~...

     

    一、存储过程

    存储过程的基本格式如下:

    -- 声明结束符
    -- 创建存储过程
    DELIMITER $  -- 声明存储过程的结束符
    CREATE PROCEDURE pro_test()    --存储过程名称(参数列表)
    BEGIN
        -- 可以写多个sql语句;      -- sql语句+流程控制
        SELECT * FROM employee;
    END $  -- 结束 结束符
    
    -- 执行存储过程
    CALL pro_test();   -- CALL 存储过程名称(参数);
    
    -- 删除存储过程
    DROP PROCEDURE pro_test;
    
    参数:
    IN:   表示输入参数,可以携带数据带存储过程中
    OUT: 表示输出参数,可以从存储过程中返回结果
    INOUT: 表示输入输出参数,既可以输入功能,也可以输出功能

     

    1. 带有输入参数的存储过程

        需求:传入一个员工的id,查询员工信息

    DELIMITER $
    CREATE PROCEDURE pro_findById(IN eid INT)  -- IN: 输入参数
    BEGIN
        SELECT * FROM employee WHERE id=eid;
    END $ 
    
    -- 调用
    CALL pro_findById(4);

     

    2. 带有输出参数的存储过程

    DELIMITER $
    CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20))  -- OUT:输出参数
    BEGIN
            -- 给参数赋值
        SET str='hellojava';
    END $

    如何接受返回参数的值呢?这里涉及到MySQL的变量

     

    MySQL变量一共有三种:

    全局变量

    全局变量又叫内置变量,是mysql数据库内置的变量 ,对所有连接都起作用。

    查看所有全局变量: show variables

    查看某个全局变量: select @@变量名

    修改全局变量: set 变量名=新值

    character_set_client: mysql服务器的接收数据的编码

    character_set_results:mysql服务器输出数据的编码

     

    会话变量

    只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失!

    定义会话变量: set @变量=值

    查看会话变量: select @变量

    局部变量

    在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失。

     

    回到上面这个存储过程,如何接受返回参数的值呢?

    定义一个会话变量name, 使用name会话变量接收存储过程的返回值

    CALL pro_testOut(@NAME);

    查看变量值

    SELECT @NAME;

     

    3. 带有输入输出参数的存储过程

    DELIMITER $
    CREATE PROCEDURE pro_testInOut(INOUT n INT)  -- INOUT: 输入输出参数
    BEGIN
       -- 查看变量
       SELECT n;
       SET n =500;
    END $
    
    -- 调用
    SET @n=10;
    
    CALL pro_testInOut(@n);
    
    SELECT @n;

     

    4. 带有条件判断的存储过程

    需求:输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”;

    DELIMITER $
    CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))
    BEGIN
        IF num=1 THEN
            SET str='星期一';
        ELSEIF num=2 THEN
            SET str='星期二';
        ELSEIF num=3 THEN
            SET str='星期三';
        ELSE
            SET str='输入错误';
        END IF;
    END $
    
    --调用
    CALL pro_testIf(4,@str);
     
    SELECT @str;

     

    5. 带有循环功能的存储过程

    需求: 输入一个整数,求和。例如,输入100,统计1-100的和

    DELIMITER $
    CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
    BEGIN
        -- 定义一个局部变量
        DECLARE i INT DEFAULT 1;
        DECLARE vsum INT DEFAULT 0;
        WHILE i<=num DO
              SET vsum = vsum+i;
              SET i=i+1;
        END WHILE;
        SET result=vsum;
    END $
    
    --调用
    CALL pro_testWhile(100,@result);
    
    SELECT @result;

     

    6. 使用查询的结果赋值给变量(INTO)

    DELIMITER $
    CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR(20) )
    BEGIN
        SELECT empName INTO vname FROM employee WHERE id=eid;
    END $
    
    --调用
    CALL pro_findById2(1,@NAME);
    
    SELECT @NAME;

    大家想了解更多深层知识点,并且很实用,可以去以下链接查看,现在很多的‘’一款APP,(知识星球)
    https://t.zsxq.com/F2JAIiu   (搜索:php技术交流与分享,加入星球,就可以一直了解您想要的知识点)

    二、 触发器

    触发器作用:当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成。

    ~~语法~~

    CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
    BEFORE AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后。
    INSERT UPDATE DELETE } --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
    ON <表名称> --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
    FOR EACH ROW --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
    <触发器SQL语句> --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

     

    需求: 当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据

     

    CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW    -- 当往员工表插入一条记录时
         INSERT INTO test_log(content) VALUES('员工表插入了一条记录');

    以上触发器是基于insert的,以下两个是基于update和delete的。

    -- 创建触发器(修改)
    CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW    -- 当往员工表修改一条记录时
         INSERT INTO test_log(content) VALUES('员工表修改了一条记录');
     
    -- 创建触发器(删除)
    CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW    -- 当往员工表删除一条记录时
         INSERT INTO test_log(content) VALUES('员工表删除了一条记录');

     

     

     

    使用触发器深层理解

     

    下面为了更深刻的理解触发器的作用和用法,以一个实例来演示,现在有下面这样一个需求: 
    需求:有两张表,一张订单表,一张商品表,每生成一个订单,意味着商品的库存要减少。

    -- 创建表
    create table goods(
        id int primary key auto_increment,
        name varchar(20) not null,
        price decimal(10,2) default 1,
        inv int comment '库存数量'
    ) charset utf8;
    
    insert into goods values(null,'荣耀3c',999,100),
    (null,'魅族3c',1299,50),
    (null,'iphone6s',5999,200),
    (null,'荣耀6',1999,250),
    (null,'iphonese',2999,300);
    
    create table orders(
        id int primary key auto_increment,
        o_id int not null comment '商品id',
        o_number int comment '商品数量'
    ) charset utf8;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    这里写图片描述

    创建触发器

    -- 临时修改语句结束符
    delimiter $$
    
    create trigger after_order after insert on orders for each row
    begin 
        -- 触发器内容开始
        update goods set inv = inv - new.o_number where id = new.id;
    
    
    end
    
    -- 结束触发器
    $$
    -- 修改临时语句结束符
    delimiter  ;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这里写图片描述

    下面,根据生成一个指定商品的订单号,看下goods表中的对应商品的数量是否会减少,即触发器是否真正工作

     -- 生成订单
     insert into orders values(null,1,3);
    • 1
    • 2

    这里写图片描述

    查看触发器

    -- 查看所有触发器或者模糊匹配
    show triggers [like pattern]
    
    -- 查看所有触发器
    show triggers\G
    • 1
    • 2
    • 3
    • 4
    • 5

    这里写图片描述

    -- 所有的触发器都会保存在一张表中,information_schema.triggers
    select * from information_schema.triggers\G
    • 1
    • 2

    这里写图片描述

    删除触发器

    drop trigger 触发器名称
    -- 删除触发器
    drop trigger after_order;
    • 1
    • 2
    • 3

    这里写图片描述

     

     

     

     

    复制相关:

    1触发器在MySQL复制环境中也是可以工作的

    在MySQL5.0的版本和其他大多数数据库系统一样,触发器和复制都能工作。在主库上,通过触发器承载的操作,不会复制到从库上。但是,如果主库上存在的触发器,如果在从库上的相关表中也创建的话,在从库上的触发器就能和主库一样被激活、触发。

    2.在主库上的操作是怎样被复制到从库上去的?

    首先要确定一件事:主从库都有同样的触发器,在主库上创建的触发器也要在从库上重新创建一遍。这样DML语句在复制中就能在从库上激活触发器。例如:还是a表,我们在a表中创建了一个after insert 触发器,复制过程如下:

    1).一条insert语句插入a表

    2).after insert 激活触发器,也插入到b表

    3).insert语句写入到bin log中

    4).复制线程获得并执行insert语句

    5).after insert 激活触发器,也插入到b表

     

     

     

    • 1
    • 2
    • 3
    • 4
    • 5

     

     

     
    • 1
    展开全文
  • TC787移相触发器应用TC787和TC788是采用独有的先进IC工艺技术,并参照国外最新集成移相触发集成电路而设计的单片集成电路。它可单电源工作,亦可双电源工作,主要适用于三相晶闸管移相触发和三相功率晶体管脉宽...
  •  三相可控硅桥式半控整流电路可以在交流电源电压不变的情况下,通过改变可控硅的触发电路控制角来实现对整流电路直流输出电压的控制,这种电路在中等容量的整流装置或不要求可逆的电力拖动系统中应用较为广泛。...
  • 1)碳膜电阻器广泛用于收音机、电视机、计算机、录像机及各种仪表等交流、直流电路中。如:RT-O.25、RT-O.5、RT-l、RT一2等为普及型碳膜电阻器,可用于收音机、录音机等要求不高的家电设备中及各种交、直流电路中。RTl...
  • 前言在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。触发器类型触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器...

    前言

    在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。

    触发器类型

    触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。

    开发中肯定会用到Oracle的触发器,本文进行详细讲解。

    这里实例中用到的主要是Oracle中scott用户下的emp以及dept表,数据如下

    1ca4e051d8e191711ca6c7a44c666518.png

    f7890eafc643ade7cb629023b5af2bd8.png

    一、触发器概念

    1、概念:

    触发器的本质是一个存储过程,顾名思义发生特定事件时Oracle会执行触发器中的代码。细分它的组成可以分为3个部分:第一部分在什么条件下触发器会执行,即触发器被触发的事件。第二部分在什么时间点执行触发器即触发器的发生事件例如before,after。第三部分触发器自身所要做的事情,就是触发器被触发以后具体想表达的事件,在begin和end之间的sql。

    二、触发器的分类:

    1、ddl触发器:即执行ddl操作后所触发的事件。

    常用的ddl操作有:grant(授权),revoke(撤销授权),create(创建),drop(删除),alter(修改),comment(注释),audit(审核),rename(重命名)在进行具体实例以前先来讲解另一个概念:oracle中的user和schema:

    user:oracle中的用户,拥有数据库的对象以及对数据库对象增删改查的权限。schema:该用户下所有数据库对象的集合Collection.类似于生活中房子schema和房子的拥有者user之间的关系,你是一个用户user你可以通过alter session查看别人的房子,但是你是否可以改变房子中的家具,要看这个房子的拥有者是否grant你这个权限,除非你是所有房子的最高权限人dba。

    ddl Example:禁止scott用户的所有ddl操作

    CREATE OR REPLACE TRIGGER scott_trigger

    BEFORE DDL

    ON SCHEMA

    BEGIN

    RAISE_APPLICATION_ERROR(-20008,'禁止scott用户的所有ddl操作');

    END;

    create sequence myseq;

    b1bce5644915dabf8f557bb7752d832c.png

    这里看到在创建触发器以后如果仍然使用ddl操作,便会报错。

    2、dml触发器:基于dml操作的触发器,细分又可以分为行触发器和语句触发器。

    A、语句触发器:dml操作可能会影响很多行,主要用于对数据的安全保护。

    Example:禁止在周四,周五修改emp表数据

    CREATE OR REPLACE TRIGGER emp_trigger

    BEFORE UPDATE OR DELETE OR INSERT

    ON emp

    BEGIN

    IF to_char(sysdate,'day') IN ('星期四','星期五') THEN

    RAISE_APPLICATION_ERROR(-20008,'不允许在周四周五修改emp表');

    END IF;

    END;

    update emp set sal=800;

    b1e4632a4e6618a2680bf24381175180.png

    这里建立触发器以后,当你想改变所有人的工资时就会出触发器的错误,所有人的工资即表示会影响很多行。

    B、行级触发器:针对需要操作的那一行,有关键词:for each row,用来

    (1)实现数据的审计功能:

    Example:做一个记录删除员工信息的表记录被删除员工的信息

    这里为了不改变oracle中emp表的数据,新建一个emp_new表

    create table emp_new

    as

    select * from emp;

    create table emp_audit(name varchar2(10),delete_time Date);

    CREATE OR REPLACE TRIGGER delete_trigger

    AFTER DELETE ON emp_new

    FOR EACH ROW

    BEGIN

    INSERT INTO emp_audit values(:old.ename,sysdate);

    END;

    delete from emp_new where empno='7499';

    select * from emp_audit;

    fe8d69a6e2d4e29b1e8a563d86336219.png

    这里可以看到在创建触发器时,用到了for each row关键词,:old.***用来表示更改以前的表中的数据,:new.***用来表示更改以后的数据,在删除数据以后在日志表就有对应的记录。

    (2)实现数据完整性:

    Example:要求员工涨工资后,不能低于原来的工资,所涨工资也不能高于原来的50%。

    这里为了不改变oracle中emp表的数据,新建一个emp_new表

    create table emp_new

    as

    select * from emp;

    CREATE OR REPLACE TRIGGER emp_trigger

    BEFORE UPDATE OF sal ON emp_new

    FOR EACH ROW

    WHEN (new.sal1.5*old.sal)

    BEGIN

    RAISE_APPLICATION_ERROR(-20008,'工资只增不降,且涨幅不可大于50%');

    END;

    update emp_new set sal = 1.6*sal where empno='7788';

    2d9ed1587151fcbf142d2a65d887517c.png

    这里可以看到当改变数据时会触发触发器错误,对表中某一个字段的修改用UPDATE OF即可,另外如果new和old在PLSQL块的外部即BEGIN外面不可以加冒号。

    (3)参照完整性:

    Example:主要用于级联更新,如更新dept表中的deptno时,emp表的deptno也更新。

    这里仍然新建2个表分别和emp表dept表的数据相同。

    create table emp_new

    as

    select * from emp;

    create table dept_new

    as

    select * from dept;

    CREATE OR REPLACE TRIGGER cascade_trigger

    AFTER UPDATE OF deptno ON dept_new

    FOR EACH ROW

    BEGIN

    UPDATE emp_new SET deptno=:new.deptno WHERE deptno=:old.deptno;

    END;

    update dept_new set deptno=15 where deptno=20;

    select * from dept_new;

    1d7cafbb5c64ec1e2a922ca4ec2881dc.png

    select * from emp_new;

    a004efc0ca866ad580acc4bb6663ac14.png

    这里参照完整新指具有主从关系的多个表,当更新主表主键时需要更新从表的相关数据。

    3、替代触发器:

    这里先讲另一个概念:带有with check option的视图:

    如果视图的定义包括条件(如where子句)并且任何应用于该视图的INSERT或UPDATE语句都应包括该条件,则必须使用WITH CHECK OPTION定义该视图。

    Example:

    CREATE VIEW emp_view

    (ename,empno)

    AS SELECT ename,empno FROM emp

    WHERE deptno=20

    WITH CHECK OPTION;

    这里有个条件部门号为20,则任何修改这个视图的语句都必须针对的是20号部门的员工。

    继续替代触发器的概念:关键字insteadof,主要针对一些复杂的视图,因为级联表所产生的视图不可以使用update,insert,delete等关键字,没有before,after等关键字,并且不可以建立在with check option选项的视图上,比如新建一个emp表和dept表的级联视图,则不可以向其中添加数据,现在通过触发器解决:

    Example:

    仍然新建2个表分别和emp表dept表的数据相同。

    CREATE TABLE emp_new

    AS

    SELECT * FROM emp;

    CREATE TABLE dept_new

    AS

    SELECT * FROM dept;

    CREATE VIEW emp_dept

    AS

    SELECT d.deptno,d.dname,e.empno,e.ename

    FROM dept_new d,emp_new e

    WHERE d.deptno=e.deptno;

    这里scott用户需要先通过sysdba授权才能建立视图:

    grant create view to scott;

    CREATE OR REPLACE TRIGGER insteadof_trigger

    INSTEAD OF INSERT ON emp_dept

    FOR EACH ROW

    DECLARE

    v_temp INT;

    BEGIN

    SELECT COUNT(*) INTO v_temp FROM dept_new WHERE deptno=:new.deptno;

    IF v_temp=0 THEN

    INSERT INTO dept_new(deptno,dname) VALUES(:new.deptno,:new.dname);

    END IF;

    SELECT COUNT(*) INTO v_temp FROM emp_new WHERE empno=:new.empno;

    IF v_temp=0 THEN

    INSERT INTO emp_new(deptno,empno,ename) VALUES(:new.deptno,:new.empno,:new.ename);

    END IF;

    END;

    INSERT INTO emp_dept values(15,'HUMANRESOURCE',7999,'LEAF');

    select * from emp_new;

    18eaf5df8383cf8dd959408f92ab9c9c.png

    select * from dept_new;

    9931b2f4156e53757f021aac89cce060.png

    这里触发器中当对视图进行insert时,会对相应的emp_new 和dept_new进行修改,也就做到了对复杂视图的修改。

    4、系统触发器:顾名思义,由系统触发器所触发的事件,常用的系统事件startup,shutdown,db_roll_change,server error等。

    Example:记录启动数据库时的事件以及时间。

    此处因为是系统触发器,所以需要用sysdba的权限登陆。

    CREATE TABLE event_table(event VARCHAR2(50),event_time DATE);

    CREATE OR REPLACE TRIGGER event_trigger

    AFTER STARTUP ON DATABASE

    BEGIN

    INSERT INTO event_table VALUES(ora_sysevent,sysdate);

    END;

    afa55a2a30b06fc039709d68878078f7.png

    select * from event_table;

    85f237b095c7d9a5484c4d33c2cf676c.png

    三、触发器的综合实例

    Example:做一个日志用来记录scott用户的一些操作:

    首先在sysdba权限下建立日志表,序列,触发器:

    CREATE TABLE object_log(

    logid NUMBER CONSTRAINT pk_logid PRIMARY KEY,

    operatedate DATE NOT NULL,

    objecttype VARCHAR2(50) NOT NULL,

    objectowner VARCHAR2(50) NOT NULL

    );

    CREATE SEQUENCE obj_log_seq;

    CREATE OR REPLACE TRIGGER object_trigger

    AFTER CREATE OR DROP OR ALTER ON DATABASE

    BEGIN

    INSERT INTO object_log VALUES(obj_log_seq.nextval,sysdate,ora_dict_obj_type,ora_dict_obj_owner);

    END;

    在scott用户下随便创建个东西:

    CREATE SEQUENCE my_seq;

    回到sysdba权限下查看日志表中是否有对应的记录:

    SELECT * FROM object_log;

    e7c54d61f39725a82b8f0a13060120ce.png

    发现有数据,说明一个日志表成功做好,监视一些用户操作的触发器就做好了。至此,触发器全部说明完毕,不足之处还请评论说明,谢谢。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    展开全文
  •  三相可控硅桥式半控整流电路可以在交流电源电压不变的情况下,通过改变可控硅的触发电路控制角来实现对整流电路直流输出电压的控制,这种电路在中等容量的整流装置或不要求可逆的电力拖动系统中应用较为广泛。...
  • 三相可控硅桥式半控整流电路可以在交流电源电压不变的情况下,通过改变可控硅的触发电路控制角来实现对整流电路直流输出电压的控制,这种电路在中等容量的整流装置或不要求可逆的电力拖动系统中应用较为广泛。
  • MySQL触发器的使用

    2022-01-03 12:12:44
    触发器的关键字是trigger,可以用它来对触发器进行操作,因为触发器的性质,在日志中受到广泛使用。

    触发器是与表有关的数据库对象,可以在表的insert、update、delete操作之前或之后触发并执行触发器中定义的sql语句。

    这种特性可以协助引用系统在数据库段确保数据的完整性、日志记录、数据校验等操作。

    使用别名new(新的)和old(旧的)来应用触发器中发生变化的内容记录。

    触发器的分类

    触发器的语法

    account表数据:

     account_log数据:

     触发器的创建

    # insert型触发器
    DELIMITER $
    CREATE TRIGGER trig1
    AFTER INSERT
    ON account
    FOR EACH ROW
    BEGIN
    	INSERT INTO account_log(operateType,operateTime,account_id,remarks)
    	VALUES('insert',NOW(),new.id,CONCAT("插入的数据{id=",new.id,",u_name=",new.u_name,",money=",new.money,"}"));
    END$
    DELIMITER ;

    # delete型触发器
    DELIMITER $
    CREATE TRIGGER trig2
    BEFORE DELETE
    ON account
    FOR EACH ROW
    BEGIN
    	INSERT INTO account_log(operateType,operateTime,account_id,remarks)
    	VALUES('delete',NOW(),old.id,CONCAT("删除的数据{id=",old.id,",u_name=",old.u_name,",money=",old.money,"}"));
    END$
    DELIMITER ;
    # delete型触发器
    DELIMITER $
    CREATE TRIGGER trig3
    BEFORE UPDATE
    ON account
    FOR EACH ROW
    BEGIN
    	INSERT INTO account_log(operateType,operateTime,account_id,remarks)
    	VALUES('delete',NOW(),new.id,CONCAT("修改前的数据{id=",old.id,",u_name=",old.u_name,",money=",old.money,"}"
    	"修改后的数据{id=",new.id,",u_name=",new.u_name,",money=",new.money,"}"));
    END$
    DELIMITER ;

    # 添加账户表中的数据
    INSERT INTO account(u_name,money) VALUES('张三',600);
    # 查看日志表中的数据
    select * from account_log;

    # 删除账户表中的数据
    DELETE FROM account WHERE u_name='张三';
    # 查看日志表中的数据
    select * from account_log;

    # 修改账户表中的数据
    UPDATE account SET u_name='mark' WHERE u_name='jack';
    # 查看日志表中的数据
    select * from account_log;

    查看触发器以及删除触发器 

    总结:触发器的关键字是trigger,可以用它来对触发器进行操作,因为触发器的性质,在日志中受到广泛使用。

    打卡第16天,欢迎对数据库感兴趣的朋友一起讨论、交流,请多指教! 

    展开全文
  • 数据库完整性之触发器

    千次阅读 2021-12-18 17:13:33
    触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程 触发器保存在数据库服务器中 任何用户对表的增、删、改操作均由服务器自动激活相应的触发器 触发器可以实施更为复杂的检查和操作,具有更精细和更...
  • T触发器的特性方程是

    千次阅读 2020-12-28 23:21:59
    【单选题】若要用JK触发器设计一个同步十五进制加法计数器,则最少需要 个触发器。 (2.0分)【单选题】在excel2010的分类汇总功能中,默认用的是对分类数椐求( )【简答题】旅游业是最近二十年来在世界各地迅速发展的一...
  • T触发器的特性表.ppt

    千次阅读 2021-01-30 11:34:29
    T触发器的特性表反相器 单稳态 图略 6.26分析图P6.26所示的电子门铃电路,当按下按钮S时可使门铃鸣响。 (1)说明门铃鸣响时555定时器的工作方式。 (2)改变电路中什么参数能改变铃响持续时间? (3)改变电路中什么参数...
  • 触发器

    2016-03-31 13:45:00
    引述 首先, 说下我写篇文章的目的,...如果你有对触发器和事务的概念,有些了解,这篇文章,对你来说会是很简单,或能让你更进一步的了解触发器里面的一些故事,和触发器中事务个故事。在这边文章里面,我...
  • 现今晶闸管主要应用交流-直流相控整流和交流-交流相控调压等,适用于这些应用的各种驱动触发器都已集成化、系列化。例如目前国内生产的KJ系列和KC系列的晶闸管驱动 (触发)器,都可供研制选用。  为保证晶闸管...
  • 从初学者对数字设计的疑问?到什么是FPGA?什么是ASIC?在到布尔代数如何在FPGA内部实现?最后到数字设计的核心元件触发器? 本文将从简洁的角度带你认识这些数字设计的必备基础知识!
  • matlabl里6脉冲触发器

    千次阅读 2021-05-06 02:59:44
    (A)施密特触发器 (B)单稳态触发器 (C)T 触发器 (D)多谐振荡器 [T6.6]如图 T6.6 所示的单稳态触发器电路中,为加大输出脉冲宽度,可采取的下列 措施中哪条: . (A)加大 Rd (B) 加大 R (C) 提高 VDD (D)增加输入......第...
  • 一、 HSPICE的基本操作过程 打开HSPICE程序,通过OPEN打开编写好的网表文件。 按下SIMULATE进行网表文件的仿真。 按下AVANWAVES查看波形图(仿真结果)。...三、 在纸上手画D触发器的晶体管级电路
  • UiPath进程结束触发器

    2021-08-07 18:42:43
    上面是一个关于进程结束触发器的教程视频,便于理解 下面我来讲讲大概的过程 UiPath.Core.Activities.ProcessEndTrigger 指定进程结束时执行一个或多个活动。 共同 ContinueOnError-指定即使活动引发错误,自动...
  • (1)D触发器VHDL描述

    千次阅读 2020-11-19 16:14:38
    2.01 D触发器VHDL描述 2.1.1 本节目录 第一,章节目录; 第二,前言; 第三,FPGA简介; 第四,VHDL简介; 第五,D触发器VHDL描述实例; 第六,结束语; 2.1.2 本节引言 给FPGA一个支点,它可以撬动整个...
  • 分立器件被广泛的应用到消费电子、计算机及外设、网络通信、汽车电子、LED显示屏等领域,大大促进了通信技术、自控技术以及计算机技术的发展。 1.1、分立元件 分立元件是与集成电路(俗话说“芯片”)相对而言的...
  • Java面试题-day26 数据库之存储过程和触发器

    多人点赞 热门讨论 2022-01-13 23:24:32
    写在前面 ????...存储过程和触发器 1) 存储过程和函数 存储过程重在处理数据,函数可以返回值 存储过程是procedure用户定义的一系列sql语句的集合,涉及特定表或其它对象 的任务,用户可以调用
  • 关键词:单片机 VB 晶阐管 数字触发器电力电子技术研究的内容包括三个方面:电力电子器件、变流电路和控制电路。电力电子变流技术在工业化领域有着广泛的应用。家用电器节能灯、电子拖动、电炉控制系统中已采用相控...
  • 三,MySql常用操作 数据库,权限表,表内容,常用函数,备份与恢复,存储过程,触发器,事务 四,MySql优化 需求设计 SQL语句:索引的优化,sql语句的优化,表的优化 运维配置角度 五,MySql集群部署 主从复制,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,726
精华内容 3,490
关键字:

交流触发器的应用