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

    千次阅读 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) 
    =================================================================================== 

    好处:相对于外部程序、存储过程,触发器可以更快更高效的维护数据
    坏处:(我自己的经验)触发器要用的恰到好处,一个大型应用里,触发器越少越好,触发器会使编程时源码的结构被迫打乱,为将来的程序修改、源码阅读带来很大不便
    展开全文
  • 本文介绍两种基础数据单向同步方式,以应对不同场景和需求,对比两种方案缺点,总结应用场景。一、简单库内表同步场景此场景主要特点是数据量不大,结构比较简单,而且没有跨数据库实例情况,适合使用...

    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数据同步是目前数据库使用中比较常见的场景,其技术成熟,应用广泛。

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

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

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

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

    8b226b70ce8f114c2ef2544a7453e13a.png

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

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

    e26fc08700dd38cd4919c2044acc0dd6.png

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

    0031f41109a5cc326becd17764d9dcdb.png

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

    0dcba26f09215086bd18005896be89ed.png

    新增数据并测试:

    98512e0e49ad793eff50ba1ed3d0797c.png

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

    update和delete触发器实例如下:

    3a43ffaa602acc0cc742acf3bda1158c.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的配置:

    e7671f1be81bc7968b9ffc24bcc6acd1.png

    这里注意 server-id要唯一。

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

    c9d70bbf96d1e6dd6bd4f2c28d7eeabd.png

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

    33d20bc7f3d312da5d3d1d3f63f29dd7.png

    主库配置完成。

    第二步,配置从库信息:

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

    74d66e8333f8d326d248eef017e0f27c.png

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

    17930fca0ee67abb6fdc51b9a5d0284f.png

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

    8e96ccd04ea54ec42bd371955c7d72d2.png

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

    27841572a23bb5a01900b80da2478326.png

    三、两种方案的对比

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

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

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

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

    各位新朋友~记得先点蓝字关注我哦~

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

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

    58af2f8432d3ab6ed2058b4c969311ed.gif

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

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

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

    19859a221fed5967ae4c6d56f331d81b.png

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

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

    9c1e643c84e5f1edf14bbc2c06230240.png

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

    9491741bca19ac56488b4c97c7f97a55.png

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

    f211622c02e6d0756636c4be08d77e0d.png

    新增数据并测试:

    9996386c7ec0ff78ecda4648ba91be03.png

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

    update和delete触发器实例如下:

    ee853a017917c7d5abe1f0ae51142aca.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的配置:

    25e0d789898ec926b444126d14cb9d54.png

    这里注意 server-id要唯一。

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

    03750a45402bf438c8bd7f159741cd43.png

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

    6f957ccf4d06c3c74ae1fa72c5469668.png

    主库配置完成。

    第二步,配置从库信息:

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

    d7326358f4fcbe5600573d91edbd51b0.png

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

    895abe7c331c11c717d06b66d62aca80.png

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

    4463af8899d5d1418ec26d08361dbf08.png

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

    2e0ffeb7602b82d8b5505a079b01705e.png

    三、两种方案的对比

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

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

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

    43f3c671085a7c5502698ee580d89f16.gif

    美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。

    dd198225d56b33e1b9e5b874cf8fd784.png
    展开全文
  • FIFO是英文First In First Out 缩写,是一种先进先出数据缓存器,他与普通存储器区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序读出数据, 其数据地址由内部读写指针...
  • Mysql触发器入门总结

    2020-11-08 11:31:54
    索引树一、触发器初接触二、触发器含义三、实现需求举例四、触发详解五、触发器的缺点 一、触发器初接触 前段时间,在儿童医院上线项目,有个需求是:Java技术往表里一直写入数据,需要我将这些数据在存到另一个表...
  • 1:通过触发器实现两表间数据同步 这是个最常用方法。具体实现步骤就不写了。 优点:能够保持两表实时同步。不需要额外辅助导库程序。 缺点:两表之间耦合度很高。如果要对数据进行处理,那么需要一定SQL...
  • 1. 触发器,在数据库中建立增删改的触发器,每当数据库有变化,就会激活触发器,进而执行相应操作,缺点是性能问题; 2. 时间戳,即在要同步的表里增加一个字段,当数据变化后,这个字段会发...
  • 数据同步的关键在于捕获数据变化,提取数据,网络传输...捕获数据变化触发器,这是最简单直接方式,优点是编程简单,缺点是具有一定侵入性,此外还要注意 MySQL 5.7 之前一个表不支持多个触发器;Oracle Stream...
  • 1. 触发器,在数据库中建立增删改的触发器,每当数据库有变化,就会激活触发器,进而执行相应操作,缺点是性能问题; 2. 时间戳,即在要同步的表里增加一个字段,当数据变化后,这个字段会发生相应变化,然后...
  • 同步复位会综合为更小的触发器,特别在该复位信号被触发器的输入逻辑门控时 同步复位确保复位只发生在有效时钟沿。时钟可以作为过滤掉复位毛刺的手段 2. 同步复位的缺点 同步复位可能需要一个脉冲展宽器,以保证...
  • 本文介绍两种基础数据单向同步方式,以应对不同场景和需求,对比两种方案缺点,总结应用场景。一、简单库内表同步场景此场景主要特点是数据量不大,结构比较简单,而且没有跨数据库实例情况,适合使用...
  • 本文介绍两种基础数据单向同步方式,以应对不同场景和需求,对比两种方案缺点,总结应用场景。一、简单库内表同步场景此场景主要特点是数据量不大,结构比较简单,而且没有跨数据库实例情况,适合使用...
  • MySQL数据库是现在常用数据库,由于一些业务需求,多个不同服务器上数据库需要数据同步或者部分数据同步。如何同步?怎么同步才简单? 方案 目前有以下几种方案(参考): 通过逻辑代码层面去实现,定时去...
  • 异步复位同步释放

    2016-12-16 23:19:00
    同步复位的缺点: 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑如:时钟偏移、组合逻辑路径延时、复位延时等因素。 由于大多数的厂商目标库内的触发器都只有异步复位端口,...
  • 都是分布式服务器框架 ...kbe有服务端场景空间系统、触发器、集成导航网格、完善AOI广播机制、python脚本热更,(这些et需要自己添加),kbe通讯模式为(属性自动同步与远程方法调用)不可等待返...
  • 组合逻辑最大的缺点就是会存在竞争冒险, 时序逻辑最基本的单元就是寄存器,寄存器具有存储功能,一般是由 D 触发器构成,由时钟脉冲控制,每个 D 触发器(D Flip Flop ,DFF)能够存储一位二进制码。 其复位又...
  • 同步时序设计原则

    2020-07-31 23:40:24
    同步时序设计原则 同步设计是 PLD ASIC 设计最重要原则。首先阐释为什么在 PLD 设计中要采用同步时序设计,然后重点论述同步时序设计要点。 本文内容为阅读一些书籍摘录...(3)异步时序电路最大缺点是容易产
  • 依据采用原理不同分为如下方法:依据时间戳更新数据、通过触发器更新数据以及SQL Server特有CDC(change data capture)机制更新数据。本文针对公司数据库同步需求,首先介绍3种方法缺点,然后提出其中可行...
  • 数据同步

    2009-12-11 12:24:00
    1:通过触发器实现两表间数据同步 这是个最常用方法。具体实现步骤就不写了。 优点:能够保持两表实时同步。不需要额外辅助导库程序。 缺点:两表之间耦合度很高。如果要对数据进行处理,那么需要一定SQL...
  • 总结一下Oracle数据库表级别复制同步 一.通过触发器进行表复制 原理,是监听表上都某一字段进行DML操作,然后得到DML操作数据,重新在另一个表上执行DML操作。 优点: 简单,编写一个触发器就...
  • 同步复位 优点: 一般能够确保电路是百分之百同步的。... 由于大多数厂商目标库内的触发器都只有异步复位端口,采用同步复位话,就会耗费较多逻辑资源。 异步复位 优点: 异步复位信号识...
  • 其实异步复位话,优点就是可以直接用触发器异步复位端,相对同步复位来说又简单又省逻辑资源,但其致命缺点就是复位结束也就是释放时刻恰在时钟上升沿建立时间和保持时间之间时无法决定现在复位状态是1还是0...
  • 基于时间戳CDC基于触发器的CDC基于快照的CDC基于日志的CDC基本用时间戳CDC,日志CDC!分为侵入式和非侵入式。侵入式:对源数据库有sql操作,有性能影响(前三种都是)1.基于时间戳CDC两列时间,分别记录create_time和...
  • SOC中复位电路

    千次阅读 2019-11-19 14:38:07
    对电路的复位往往是指对触发器的复位,也就是说电路的复位中的这个“电路”,往往是指触发器,这是需要注意的。有的电路需要复位信号,就像是有的电路需要时钟信号那样,而有的电路是不需要复位信号的。复位又分为...
  • 【实验】寄存器

    2021-04-15 19:23:11
    组合逻辑最大的缺点就是会存在竞争冒险,时序逻辑最基本的单元就是寄存器,寄存器具有存储功能,一般是由 D 触发器构成,由时钟脉冲控制,每个 D 触发器(D Flip Flop ,DFF)能够存储一位二进制码。 其复位又分为...
  • 保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果holdtime 不够,数据同样不能被打入触发器。 建立时间(SetupTime)和保持时间(Holdtime)。建立时间是指在时钟边沿前,数据信 号需要保持...

空空如也

空空如也

1 2 3 4
收藏数 67
精华内容 26
关键字:

同步触发器的缺点是