-
触发器优缺点
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)
===================================================================================
好处:相对于外部程序、存储过程,触发器可以更快更高效的维护数据
坏处:(我自己的经验)触发器要用的恰到好处,一个大型应用里,触发器越少越好,触发器会使编程时源码的结构被迫打乱,为将来的程序修改、源码阅读带来很大不便 -
tql触发器修改记录时同步更新_运维日记|MySQL数据单向同步方案对比
2020-12-15 16:27:20一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相...MySQL数据同步是目前数据库使用中比较常见的场景,其技术成熟,应用广泛。
本文介绍两种基础的数据单向同步方式,以应对不同的场景和需求,对比两种方案的优缺点,总结应用场景。
一、简单的库内表同步场景
此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。
这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,就会触发SQL触发器语句,从而实现对数据的同步。
下面以简单的实例展示如何使用触发器同步数据。
首先,新建两个需要同步的数据库以及相同结构的表:
在需要同步的数据库和表上新建一个insert动作之后的触发器:
使用 show triggers 查看新建的触发器:
新增数据并测试:
这里对temp_db数据库的 temp_for_sync 表新增数据,而temp_db1中的temp_for_sync表也有新增的记录同步过来了,说明insert触发器生效了。
update和delete触发器实例如下:
注意:触发器同步来的数据,只能做到单向同步,所以同步来的数据必须是只读的,否则会引发数据一致性问题,此外,对于复杂的业务场景,
触发器可能会造成一定性能问题,所以,这个方案仅适合于简单的同步场景,对于有性能要求或者较为复杂的场景并不适用。
二、使用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的配置:
这里注意 server-id要唯一。
重启服务并查看主库状态:
给从库赋权,以读取binlog从而同步数据:
主库配置完成。
第二步,配置从库信息:
配置从库信息server_id并重启从库:
在主库配置从库关于主库的信息,并开启同步主库:
验证同步效果,在主库新建库,表,记录,删除:
至此,完成了单向主从同步的基本配置。
三、两种方案的对比
这两种方法都可以实现需求,而且各有优劣:
触发器的实现比较简单,不需要另外新启动一个MySQL实例,对资源的消耗比较小,适合简单的业务场景,缺点在于字段有变更时,需要及时修改表结构,以及触发器的实现。
主从不需要关系表结构的修改,只需要配置,缺点在于需要新启MySQL服务实例,会消耗一定资源,适合业务比较复杂的场景。
-
verilog异步复位jk触发器_verilog的同步复位与异步复位
2021-01-15 23:52:50这就结合了双方面的优点,很好的克服了异步复位的缺点(因为异步复位的问题主要出现在复位信号释放的时候,具体原因可见上文)。其实做起来也并不难,我推荐一种我经常使用的方式吧:那就是在异步复位键后加上一个所谓...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
-
mysql触发器_运维日记|MySQL数据单向同步方案对比
2020-12-05 08:50:17一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相...MySQL数据同步是目前数据库使用中比较常见的场景,其技术成熟,应用广泛。
本文介绍两种基础的数据单向同步方式,以应对不同的场景和需求,对比两种方案的优缺点,总结应用场景。
一、简单的库内表同步场景
此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。
这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相关联的事件发生时,就会触发SQL触发器语句,从而实现对数据的同步。
下面以简单的实例展示如何使用触发器同步数据。
首先,新建两个需要同步的数据库以及相同结构的表:
在需要同步的数据库和表上新建一个insert动作之后的触发器:
使用 show triggers 查看新建的触发器:
新增数据并测试:
这里对temp_db数据库的 temp_for_sync 表新增数据,而temp_db1中的temp_for_sync表也有新增的记录同步过来了,说明insert触发器生效了。
update和delete触发器实例如下:
注意:触发器同步来的数据,只能做到单向同步,所以同步来的数据必须是只读的,否则会引发数据一致性问题,此外,对于复杂的业务场景,
触发器可能会造成一定性能问题,所以,这个方案仅适合于简单的同步场景,对于有性能要求或者较为复杂的场景并不适用。
二、使用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的配置:
这里注意 server-id要唯一。
重启服务并查看主库状态:
给从库赋权,以读取binlog从而同步数据:
主库配置完成。
第二步,配置从库信息:
配置从库信息server_id并重启从库:
在主库配置从库关于主库的信息,并开启同步主库:
验证同步效果,在主库新建库,表,记录,删除:
至此,完成了单向主从同步的基本配置。
三、两种方案的对比
这两种方法都可以实现需求,而且各有优劣:
触发器的实现比较简单,不需要另外新启动一个MySQL实例,对资源的消耗比较小,适合简单的业务场景,缺点在于字段有变更时,需要及时修改表结构,以及触发器的实现。
主从不需要关系表结构的修改,只需要配置,缺点在于需要新启MySQL服务实例,会消耗一定资源,适合业务比较复杂的场景。
-
sql server 迁移 mysql 触发器 数据类型_运维日记|MySQL数据单向同步方案对比
2020-12-06 11:15:44一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL... -
mysql 单向同步 测试数据_运维日记|MySQL数据单向同步方案对比
2021-01-18 19:55:05一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相... -
主从同步 过滤一些表_运维日记|MySQL数据单向同步方案对比
2021-01-15 22:12:20一、简单的库内表同步场景此场景的主要特点是数据量不大,结构比较简单,而且没有跨数据库实例的情况,适合使用触发器实现。这里先对触发器做一个简单的介绍:触发器是存储在数据库目录中的一组SQL语句。每当与表相... -
同步时序设计原则
2020-07-31 23:40:24同步时序设计原则 同步设计是 PLD ASIC 设计的最重要原则。...(2)电路的主要信号、输出信号等并不依赖于任何一个时钟性信号,不是由时钟信号驱动触发器(FF)产生的. (3)异步时序电路的最大缺点是容易产 -
SOC中的复位电路
2019-11-19 14:38:07对电路的复位往往是指对触发器的复位,也就是说电路的复位中的这个“电路”,往往是指触发器,这是需要注意的。有的电路需要复位信号,就像是有的电路需要时钟信号那样,而有的电路是不需要复位信号的。复位又分为... -
史上最好传智播客就业班.net培训教程60G 不下会后悔的
2013-07-08 18:09:28ASP.Net MVC是微软推出的区别于ASP.Net WebForm的Web开发新技术,由于ASP.Net MVC解决了ASP.Net WebForm的很多缺点,非常适合大型、中型项目的开发,一经推出就受到了.Net开发社区的追捧,很多.Net开发人员的职位... -
Oracle Database 11g完全参考手册--详细书签版
2013-02-03 10:58:39CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 特别说明:该版本是目前网络上最全的版本:修正了所有缺页和错页的问题。 Oracle Database 11g完全参考手册 ... -
Java面试宝典2020修订版V1.0.1.doc
2020-05-21 19:24:481、触发器的作用? 40 2、什么是存储过程?用什么来调用? 40 3、存储过程的优缺点? 40 4、存储过程与函数的区别 41 5、索引的作用?和它的优点缺点是什么? 41 6、什么样的字段适合建索引 41 7、索引类型有哪些? ... -
java面试宝典
2013-02-28 16:04:01182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? 44 185、getServletContext... -
千方百计笔试题大全
2011-11-30 21:58:33182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? 44 185、getServletContext... -
最新Java面试宝典pdf版
2011-08-31 11:29:228、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些... -
Java面试宝典2010版
2011-06-27 09:48:278、Request对象的主要方法: 87 9、forward 和redirect的区别 10、request.getAttribute() 和 request.getParameter() 有何区别? 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 12. jsp有哪些动作?... -
Access+2000中文版高级编程
2012-02-05 09:20:25Access2000中文版高级编程 目录 第一部分 编程基础 1 第1章 宏与代码 3 ...14.3.2 查看ListView控件的主要属性组 444 14.3.3 人工设置ListView控件 445 14.3.4 使用VBA创建和填充ListView控件 ... -
java面试宝典2011整理有答案
2011-11-09 13:36:068、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些... -
asp.net知识库
2015-06-18 08:45:45[ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库访问类 DataTable.Select方法的性能问题 .NET 2.0里使用强类型数据创建多层应用 ADO.NET实用经验无保留曝光 有了System.Data.IDataReader,一切皆成数据 ... -
2.4.7 VLAN的主要作用有? 2.4.8 在交换机中用户权限分为几个级别? 2.4.9 在路由器的配置过程中查询以S开头所有命令的方法是? 2.5.0 第一次配置路由器时可以使用的方法为? 2.5.1 在何种状态下可以为路由器...
-
C/C++笔试题(附答案,华为面试题系列)
2008-11-14 15:36:11该协议的主要层次结构? Tcp/Ip协议 主要层次结构为: 应用层/传输层/网络层/数据链路层/物理层。 11.Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 12.IP... -
oralce10g性能调整与优化--英文版
2010-01-12 11:36:343.17.2 使用裸设备的缺点 3.18 磁盘I/O的其他注意事项和提示 3.19 设计阶段需要注意的问题 3.20 技巧回顾 3.21 参考文档 第4章 用初始参数调整数据库(针对DBA) 4.1 标识重要的初始参数 4.2 不用重启... -
Oracle Database 11g数据库管理艺术--详细书签版
2012-09-30 01:09:45书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。 本书还提供了dba完成本职工作必备的基本的uniix... -
Java 面试宝典
2013-02-01 10:02:0838、try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不 会被执行,什么时候被执行,在 return 前还是后? .................................................... 25 39、下面的程序...
-
MySQL 高可用工具 heartbeat 实战部署详解
-
织梦响应式茶叶新闻资讯类网站织梦模板(自适应手机端)
-
你还有学了三年建模的朋友吗?他有救了
-
2021年黑色产业链白皮书.pdf
-
README.md()
-
window版mysql8.0.23_win64安装包
-
NFS 实现高可用(DRBD + heartbeat)
-
阿里云-云计算行业:中国新型基础设施产业园区发展模式及趋势2020.pdf
-
织梦响应式推土机挖掘机机械类网站织梦模板(自适应手机端)
-
tangt-and-song-dynasties-ssm-BookAppointment-master.zip
-
jsp基础语法
-
计算机视觉论文-2021-03-01
-
ETHALend与Clover达成合作,共同打造跨链DeFi收益优化未来
-
使用 ESP-AT 固件测试 ESP32 透传,是否支持 TCP、UDP 同时透传?
-
Golang GC笔记整理
-
分布式Dubbo+Zookeeper+SpringBoot
-
实现 MySQL 读写分离的利器 mysql-proxy
-
Delani-studio:Delani工作室网站显示其服务以及如何通过表格与他们联系。 使用下面的链接去网站-源码
-
A1032 Sharing (25 分)
-
MySQL 备份与恢复详解(高低版本 迁移;不同字符集 相互转换;表