精华内容
下载资源
问答
  • 触发器缺点

    千次阅读 2017-07-05 20:31:41
    触发器,主要是用来同步更新数据,触发器是一种特殊存储过程。 一般存储过程是通过存储过程名直接调用,而触发器主要是  通过事件(增、删、改)进行触发而被执行。其在表中数据发生变化时自动强制...

    触发器,主要是用来同步更新数据的,触发器是一种特殊的存储过程。

    一般的存储过程是通过存储过程名直接调用,而触发器主要是

      通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。

      常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。

      after(for)        表示执行代码后,执行触发器

      instead of        表示执行代码前,用已经写好的触发器代替你的操作

    触发器语法:

      create trigger 触发器的名字   on 操作表

      for|after         instead of

      update|insert|delete

      as

      SQL语句


    举个例子吧: 


    假设有两个表,tab_1 , tab_2 
    再假设两个表里都有“人员性别”这个字段 

    tab_1的数据例如: 张三```男```1978`````2002 
    tab_2的数据例如: 张三```男```销售科```科长 

    我要改tab_1中张三的性别为“女”的话,那么tab_2的性别也该改为“女”,对吧,总不能两张表的性别不同吧。 

    如果不用触发器的话,我们就要改完tab_1,再去改tab_2,使性别都变成女 

    于是这里可以用到触发器了: 

    原理是:当tab_1中某人的性别发生变更后,数据库自动将tab_2的性别进行同步修改 

    触发器也可以这样应用: 
    1、当删除tab_1中的某人信息时,触发器一并删除该人的tab_2中的数据 
    2、在tab_1中新插入一个人员时,触发器在tab_2中一并新增一条该人的数据 

    =================================================================================== 
    所以在你建立触发器时,就要指定该触发器的用途,是同步更新,还是删除、插入,由你指定。 

    基本的语法规则是: 
    create trigger 触发器名称(你自己命名的) on 表 for 用途(delete|update|insert) 
    as 
    delete|update|insert语句 
    ---------------------------------------------------------------------- 
    例如: 
    create trigger tri_A on tab_1 FOR DELETE 
    AS 
    delete tab_2 from deleted where tab_2.id = deleted.id; 

    意思是:在tab_1表上,建立触发器(tri_A),用于删除该表的数据时触发一个事务,什么事务呢?——删除tab_2中的该编号人员的记录。 

    FOR INSERT、FOR UPDATE分别是建立用于“插入记录”、“更新数据”的触发器,例子里的FOR DELETE是用于触发“删除记录”的。 

    这里还要看清楚,那个delete语句中的表,是from deleted哦,还有,where子句的tab_2.id = deleted.id,不是tab_2.id = tab_1.id哦,deleted.id是指你刚删除的那条记录的id(而update、insert,都用inserted.id) 
    =================================================================================== 

    好处:相对于外部程序、存储过程,触发器可以更快更高效的维护数据
    坏处:(我自己的经验)触发器要用的恰到好处,一个大型应用里,触发器越少越好,触发器会使编程时源码的结构被迫打乱,为将来的程序修改、源码阅读带来很大不便
    展开全文
  • 触发器

    2020-06-13 11:12:36
    缺点:没时钟信号,可以快速切换,且没有处理输入同时为0情况 二、同步RS触发器 JXTA R如果有干扰信号,就可能引起Q和Q非状态转换 Q依然跟随S,与R相反。 同为1时保持,同为0无效 三、主从JK...

    一、基本RS触发器

    两个输入端不同时,Q的值与RD反相同(与SD相同)

    都为1时,保持,都为0时,Q和Q反状态不确定,理论上不允许出现

    缺点:没时钟信号,可以快速切换,且没有处理输入同时为0的情况

    二、同步RS触发器

    JXTA R如果有干扰信号,就可能引起Q和Q非的状态转换

    Q依然跟随S,与R相反。

    同为1时保持,同为0无效

    三、主从JK触发器

    在同步RS的基础上加入了反馈。解决了干扰信号导致的在时钟信号转换之外的翻转和RS同时为0的问题。

    这里转换发生于时钟信号的下降沿

    JK不同时,Q跟随J

    同为1,翻转,同为0,保持。比如Q此时为1,JK同时为1,则时钟信号下降沿来临时,Q变为0

    四、集成主从JK触发器

    五、边沿触发器 D触发器

    时钟信号上升沿来临时,Q=D

    六、T触发器

    CP输入端有个小圆,说明信号下降沿处才可能发生状态变换。

    T=0时,保持,T=1时,Q和Q非都取反。即Q=1,Q非=0,T=1时,时钟信号来临,Q变成0,Q非变成1

    展开全文
  • 这就结合了双方面的优点,很好的克服了异步复位的缺点(因为异步复位的问题主要出现在复位信号释放的时候,具体原因可见上文)。其实做起来也并不难,我推荐一种我经常使用的方式吧:那就是在异步复位键后加上一个所谓...

    2:推荐的复位方式

    所谓推荐的复位方式就是上文中所说的:“异步复位,同步释放”。这就结合了双方面的优点,很好的克服了异步复位的缺点(因为异步复位的问题主要出现在复位信号释放的时候,具体原因可见上文)。

    其实做起来也并不难,我推荐一种我经常使用的方式吧:那就是在异步复位键后加上一个所谓的“reset synchronizer”,这样就可以使异步复位信号同步化,然后,再用经过处理的复位信号去作用系统,就可以保证比较稳定了。reset sychronizer的Verilog代码如下:

    module Reset_Synchronizer

    (output reg rst_n, input clk, asyncrst_n);

    reg rff1;

    always @ (posedge clk , negedge asyncrst_n) begin

    if (!asyncrst_n) {rst_n,rff1} <= 2'b0;

    else {rst_n,rff1} <= {rff1,1'b1};

    end

    endmodule

    大家可以看到,这就是一个dff,异步复位信号直接接在它的异步复位端口上(低电平有效),然后数据输入端rff1一直为高电平‘1’。倘若异步复位信号有效的话,触发器就会复位,输出为低,从而复位后继系统。但是,又由于这属于时钟沿触发,当复位信号释放时,触发器的输出要延迟一个时钟周期才能恢复成‘1’,因此使得复位信号的释放与时钟沿同步化。

    此外,还有一种方法更为直接,就是直接在异步复位信号后加一个D触发器,然后用D触发器的输出作为后级系统的复位信号,也能达到相同的效果。这里就不多说了。

    3:多时钟系统中复位的处理方法

    这是一个很实际的问题,因为在较大型的系统中,一个时钟驱动信号显然不能满足要求,一定会根据系统的要求用多个同源时钟(当然也可以是非同源了)去驱动系统的不同部分。那么在这样的多时钟系统中,复位键怎么设置?它的稳定与否直接关系到了整个系统的稳定性,因此要格外注意(在我看来,复位信号在同步时序系统中的地位和时钟信号一样重要)。下面就说一下具体的处理方法,当然所遵循的原则就仍应该是上文的“异步复位,同步释放”:

    1.non-coordinated reset removal:顾名思义,就是同一个系统中的多个同源时钟域的复位信号,由彼此独立的“reset synchronizer”驱动。当异步复位信号有效时,各时钟域同时复位,但是复位释放的时间由各自的驱动时钟决定,也是就说:时钟快的先释放,时钟慢的后释放,但是各复位信号之间没有先后关系。

    2.sequence coordinated reset removal:这是相对于上述方式来说的,也就是说各时钟域的复位信号彼此相关,各个部分系统虽然也同时复位,但是却分级释放。而分级的顺序可由各个“reset synchronizer”的级联方式决定。可以先复位前级,再复位后级,也可以反过来。反正方式很灵活,需要根据实际需要而定。由于图片上传问题,我只能用程序表示了,

    例子:三级复位系统,系统中的时钟分别为1M,2M,11M:

    第一级Reset_Sychronizer程序:

    module Reset_Synchronizer

    (output reg rst_n,

    inputclk, asyncrst_n);

    reg rff1;

    always @ (posedge clk , negedge asyncrst_n)

    begin

    if (!asyncrst_n) {rst_n,rff1} <= 2'b0;

    else {rst_n,rff1} <= {rff1,1'b1};

    end

    endmodule

    第2,3级的Reset_Sychronizer程序:

    module Reset_Synchronizer2

    (output reg rst_n,

    inputclk, asyncrst_n,d);

    reg rff1;

    always @ (posedge clk , negedge asyncrst_n) begin

    if (!asyncrst_n) {rst_n,rff1} <= 2'b0;

    else {rst_n,rff1} <= {rff1,d};

    end

    endmodule

    顶层模块的源程序:

    include "Reset_Synchronizer.v"

    include "Reset_Synchronizer2.v"

    module AsynRstTree_Trans

    ( inputClk1M,Clk2M,Clk11M,SysRst_n,

    output SysRst1M_n,SysRst2M_n,SysRst11M_n

    );

    Reset_Synchronizer Rst1M(.clk(Clk1M),. asyncrst_n(SysRst_n),.rst_n(SysRst1M_n));

    Reset_Synchronizer2Rst2M(.clk(Clk2M),.d(SysRst1M_n),. asyncrst_n(SysRst_n),.rst_n(SysRst2M_n));

    Reset_Synchronizer2Rst11M(.clk(Clk11M),.d(SysRst2M_n),. asyncrst_n(SysRst_n),.rst_n(SysRst11M_n));

    endmodule

    展开全文
  • 本文介绍两种基础数据单向同步方式,以应对不同场景和需求,对比两种方案缺点,总结应用场景。一、简单库内表同步场景此场景主要特点是数据量不大,结构比较简单,而且没有跨数据库实例情况,适合使用...

    4048eb31f3f89b445ef62d7d30ef3c8e.png

    MySQL数据同步是目前数据库使用中比较常见的场景,其技术成熟,应用广泛。

    本文介绍两种基础的数据单向同步方式,以应对不同的场景和需求,对比两种方案的优缺点,总结应用场景。

    一、简单的库内表同步场景

    此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。

    这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,就会触发SQL触发器语句,从而实现对数据的同步。

    253b962fba340d2cd79fe2afc764887d.png

    下面以简单的实例展示如何使用触发器同步数据。

    首先,新建两个需要同步的数据库以及相同结构的表:

    e585f854857af835d59f6e80d2b45abd.png

    在需要同步的数据库和表上新建一个insert动作之后的触发器:

    53fe0b8e75d8e4bc3a641968586f936e.png

    使用 show triggers 查看新建的触发器:

    5ef2650656fa630681bd27c6414bfdc9.png

    新增数据并测试:

    eb587045499c62a73149ac673c6b4e9f.png

    这里对temp_db数据库的 temp_for_sync 表新增数据,而temp_db1中的temp_for_sync表也有新增的记录同步过来了,说明insert触发器生效了。

    update和delete触发器实例如下:

    2b2f690310928a2f162036a914dd2a98.png

    注意:触发器同步来的数据,只能做到单向同步,所以同步来的数据必须是只读的,否则会引发数据一致性问题,此外,对于复杂的业务场景,

    触发器可能会造成一定性能问题,所以,这个方案仅适合于简单的同步场景,对于有性能要求或者较为复杂的场景并不适用。

    二、使用MySQL的主从同步方法

    binlog简介:MySQL的binlog日志作用是用来记录MySQL内部增删改查等对MySQL数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录。主要用于数据库的主从复制以及增量恢复。

    基于binlog的主从同步流程如下:

    1.主服务器(master)将变更事件(更新、删除、表结构改变等等)写入二进制日志(master log)。

    2.从服务器(slave)的IO线程从主服务器(binlog dump线程)获取二进制日志,并在本地保存一份自己的二进制日志(relay log)

    3.从服务器的SQL线程读取本地日志(relay log),并重演变更事件。

    下面简要介绍主从同步的配置方法:

    主库,本地MySQL服务器 IP: 192.168.99.215

    从库,本地MySQL服务器 IP: 192.168.98.159

    第一步,配置主库信息:

    主库配置,新增以下配置项,完成bin_log的配置:

    09ca81f4275514fa9d661089c0b9a004.png

    这里注意 server-id要唯一。

    重启服务并查看主库状态:

    723885c8e538072312d80efd2a2121c0.png

    给从库赋权,以读取binlog从而同步数据:

    0e6ee4f59121d9697beb65b9eb823235.png

    主库配置完成。

    第二步,配置从库信息:

    配置从库信息server_id并重启从库:

    eb209c7e7b144fd7eb5cc4352cd1e908.png

    在主库配置从库关于主库的信息,并开启同步主库:

    8ae46e7c7805421bed2c8ced3dcabfe5.png

    验证同步效果,在主库新建库,表,记录,删除:

    6b7b01a9e3d1dca0f533f070e2cb38bc.png

    至此,完成了单向主从同步的基本配置。

    feca58c2c55b5fede9f159ab2e0b0d81.png

    三、两种方案的对比

    这两种方法都可以实现需求,而且各有优劣:

    触发器的实现比较简单,不需要另外新启动一个MySQL实例,对资源的消耗比较小,适合简单的业务场景,缺点在于字段有变更时,需要及时修改表结构,以及触发器的实现。

    主从不需要关系表结构的修改,只需要配置,缺点在于需要新启MySQL服务实例,会消耗一定资源,适合业务比较复杂的场景。

    展开全文
  • 本文介绍两种基础数据单向同步方式,以应对不同场景和需求,对比两种方案缺点,总结应用场景。一、简单库内表同步场景此场景主要特点是数据量不大,结构比较简单,而且没有跨数据库实例情况,适合使用...
  • 本文介绍两种基础数据单向同步方式,以应对不同场景和需求,对比两种方案缺点,总结应用场景。一、简单库内表同步场景此场景主要特点是数据量不大,结构比较简单,而且没有跨数据库实例情况,适合使用...
  • Mysql触发器入门总结

    2020-11-08 11:31:54
    索引树一、触发器初接触二、触发器含义三、实现需求举例四、触发详解五、触发器的缺点 一、触发器初接触 前段时间,在儿童医院上线项目,有个需求是:Java技术往表里一直写入数据,需要我将这些数据在存到另一个表...
  • 时序电路的基本单位就是触发器,接下来介绍几种同步...它的缺点在于会有不确定状态x。 module RS_Flip( clk,r,s,q,qb);    input wire clk,r,s; output reg q; output wire qb; assign qb = ~q; always@
  • FIFO是英文First In First Out 缩写,是一种先进先出数据缓存器,他与普通存储器区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序读出数据, 其数据地址由内部读写指针...
  • MySQL视图、物化视图、触发器、存储过程理解一、视图:(相当于一个路径访问,简化sql语句,执行一些经常要输出sql语句)优点:缺点:视图再什么时候不能进行新增或则修改:语法:二、触发器:(类似框架中事件...
  • 1:通过触发器实现两表间数据同步 这是个最常用方法。具体实现步骤就不写了。 优点:能够保持两表实时同步。不需要额外辅助导库程序。 缺点:两表之间耦合度很高。如果要对数据进行处理,那么需要一定SQL...
  • 学习记录(持续改进):异步和同步的区别,以及各自缺点,以及异步复位和同步释放实现方法 1.异步 独立于时钟控制复位控制端。(就是 rst, res_n,这些在always@敏感信号表里) 这样在任何时刻只要复位...
  • kettle数据同步的五种方案

    千次阅读 2013-08-30 17:50:46
    在数据库建立增删改的触发器触发器将变更放到一张临时表里。oracle同步cdc 优点:实时同步 缺点:影响到业务系统,因为需要在业务系统建立触发器 2.日志 通过分析源数据库日志,来获得源数据库中变化数据...
  • 1. 触发器,在数据库中建立增删改的触发器,每当数据库有变化,就会激活触发器,进而执行相应操作,缺点是性能问题; 2. 时间戳,即在要同步的表里增加一个字段,当数据变化后,这个字段会发...
  • oracle同步cdc优点:实时同步缺点:影响到业务系统,因为需要在业务系统建立触发器2.日志:通过分析源数据库日志,来获得源数据库中变化数据。oracle异步cdc优点:不影响业务系统缺点:有一定得延时,对于没有...
  • 数据同步的关键在于捕获数据变化,提取数据,网络传输...捕获数据变化触发器,这是最简单直接方式,优点是编程简单,缺点是具有一定侵入性,此外还要注意 MySQL 5.7 之前一个表不支持多个触发器;Oracle Stream...
  • 数据同步

    2020-07-28 11:47:24
    数据同步:当数据源发生改变时,其他相关数据也跟着发展变化。根据需求不同可采取以下方案。 1.触发器 在数据库建立增删改的触发器。...在要同步的源表里有时间戳字段,每当数据发生变化,时间戳会记录发生变化
  • 在线QQ客服:1922638专业SQL Server、MySQL数据库同步软件需求:实现Oracle数据库表记录变更后准实时同步。可选方案:1、基于时间戳来...c、业务层编码实现同步缺点:对系统增加了额外约束同步的实时性取决于轮训...
  • 同步时序电路和异步时序电路

    千次阅读 2019-06-18 10:06:10
    同步时序电路与异步时序电路的区别: 同步:所有触发器共用一个触发信号源CP, ...同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信...
  • 同步复位会综合为更小的触发器,特别在该复位信号被触发器的输入逻辑门控时 同步复位确保复位只发生在有效时钟沿。时钟可以作为过滤掉复位毛刺的手段 2. 同步复位的缺点 同步复位可能需要一个脉冲展宽器,以保证...
  • 1. 触发器,在数据库中建立增删改的触发器,每当数据库有变化,就会激活触发器,进而执行相应操作,缺点是性能问题; 2. 时间戳,即在要同步的表里增加一个字段,当数据变化后,这个字段会发生相应变化,然后...
  • 异步复位同步释放

    2016-12-16 23:19:00
    同步复位的缺点: 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑如:时钟偏移、组合逻辑路径延时、复位延时等因素。 由于大多数的厂商目标库内的触发器都只有异步复位端口,...
  • 本文介绍两种基础数据单向同步方式,以应对不同场景和需求,对比两种方案缺点,总结应用场景。一、简单库内表同步场景此场景主要特点是数据量不大,结构比较简单,而且没有跨数据库实例情况,适合使用...
  • 本文介绍两种基础数据单向同步方式,以应对不同场景和需求,对比两种方案缺点,总结应用场景。一、简单库内表同步场景此场景主要特点是数据量不大,结构比较简单,而且没有跨数据库实例情况,适合使用...
  • MySQL数据库是现在常用数据库,由于一些业务需求,多个不同服务器上数据库需要数据同步或者部分数据同步。如何同步?怎么同步才简单? 方案 目前有以下几种方案(参考): 通过逻辑代码层面去实现,定时去...
  • 五种数据同步思路

    千次阅读 2018-05-10 13:44:46
    在数据库建立增删改的触发器触发器将变更放到一张临时表里。oracle同步cdc 优点:实时同步 缺点:影响到业务系统,因为需要在业务系统建立触发器 2.日志 通过分析源数据库日志,来获得源数据库中变化...

空空如也

空空如也

1 2 3 4 5
收藏数 98
精华内容 39
关键字:

同步触发器的缺点