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

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

    好处:相对于外部程序、存储过程,触发器可以更快更高效的维护数据
    坏处:(我自己的经验)触发器要用的恰到好处,一个大型应用里,触发器越少越好,触发器会使编程时源码的结构被迫打乱,为将来的程序修改、源码阅读带来很大不便
    展开全文
  • 一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相...

    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服务实例,会消耗一定资源,适合业务比较复杂的场景。

    展开全文
  • 一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相...

    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服务实例,会消耗一定资源,适合业务比较复杂的场景。

    展开全文
  • 一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL...
    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
    展开全文
  • 一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相...
  • 一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相...
  • 学完后收获:什么是寄存器,它能...同步复位 D 触发器同步”是和工作时钟同步的意思,异步复位 D 触发器“异步”是和工作时钟不同步的意思。主要就是复位有效条件是“立刻”执行还是等待“沿”再执行
  • 同步时序设计原则

    2020-07-31 23:40:24
    同步时序设计原则 同步设计是 PLD ASIC 设计的最重要原则。...(2)电路的主要信号、输出信号等并不依赖于任何一个时钟性信号,不是由时钟信号驱动触发器(FF)产生的. (3)异步时序电路的最大缺点是容易产
  • SOC中复位电路

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

    2021-04-15 19:23:11
    组合逻辑最大的缺点就是会存在竞争冒险,时序逻辑最基本单元就是寄存器,寄存器具有存储功能,一般是由 D 触发器构成,由时钟脉冲控制,每个 D 触发器(D Flip Flop ,DFF)能够存储一位二进制码。 其复位又分为...
  • ASP.Net MVC是微软推出区别于ASP.Net WebFormWeb开发新技术,由于ASP.Net MVC解决了ASP.Net WebForm很多缺点,非常适合大型、中型项目开发,一经推出就受到了.Net开发社区追捧,很多.Net开发人员职位...
  • 1、触发器的作用? 40 2、什么是存储过程?用什么来调用? 40 3、存储过程的优缺点? 40 4、存储过程与函数的区别 41 5、索引的作用?和它的优点缺点是什么? 41 6、什么样的字段适合建索引 41 7、索引类型有哪些? ...
  • java面试宝典

    2013-02-28 16:04:01
    182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? 44 185、getServletContext...
  • CruiseYoung提供带有详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 特别说明:该版本是目前网络上最全版本:修正了所有缺页和错页问题。 Oracle Database 11g完全参考手册 ...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? 44 185、getServletContext...
  • java面试题

    2018-04-27 19:55:38
    答:Collection是集合类的父类,继承它的主要由set和list Collections是针对集合类的帮助类,它提供了一系列针对集合的搜索,排序,线程安全化等操作。 final、finally、finalize的区别? 答:final用于声明属性...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...
  • Java面试宝典-经典

    2015-03-28 21:44:36
    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    8、Request对象的主要方法: 87 9、forward 和redirect的区别 10、request.getAttribute() 和 request.getParameter() 有何区别? 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 12. jsp有哪些动作?...
  • java面试宝典2012

    2012-12-16 20:43:41
    8、Request对象的主要方法: 94 9、forward 和redirect的区别 95 10、request.getAttribute() 和 request.getParameter() 有何区别? 96 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 96 12. jsp有哪些...
  • Java面试宝典2012版

    2012-12-03 21:57:42
    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有...
  • 8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...
  • Java面试宝典2012新版

    2012-06-26 19:20:00
    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...
  • Java面试笔试资料大全

    热门讨论 2011-07-22 14:33:56
    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...
  • 2.4.7 VLAN的主要作用有? 2.4.8 在交换机中用户权限分为几个级别? 2.4.9 在路由器的配置过程中查询以S开头所有命令的方法是? 2.5.0 第一次配置路由器时可以使用的方法为? 2.5.1 在何种状态下可以为路由器...
  • JAVA面试宝典2010

    2011-12-20 16:13:24
    8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...
  • 8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

同步触发器的主要缺点是