在sql语句中完成数据的主从显现
目前的方案是用mysqlbinlog工具,增加一个flashback参数,输出结果为一个新的binlog文件――姑且叫做flashbacklog,这个flashbacklog顺序执行,可制定某张表和执行到哪个pos,来实现数据库的闪回。明天有位做erp的伴侣在群中问,怎样在sql中完成数据的主从显现呢?详细的就是假如数据的主表信息与上条数据的主表信息不异,就把该条数据的主表信息清空,如许看来起数据的附属干系就很分明了。以下图:假如原始数据是如许的:
需完成的效果就是如许的:
本人想了一个对照复杂的思绪,以下:
先创立示例表并添补数据:
createtable#a
(
IDint,
namevarchar(50),
addressvarchar(50),
sortdecimal(18,4)
)
insertinto#a(ID,name,address,sort)
select1,张,上海,20
unionall
select2,张,上海,30
unionall
select3,张,上海,40
unionall
select4,李,深圳,40
unionall
select5,李,深圳,40
可使用sql"select*from#a"检察了局以下:
然后创立另外一个表,用来存储了局集
createtable#b
(
IDint,
namevarchar(50),
addressvarchar(50),
sortdecimal(18,4),
PIDint
)
在这个表中我增添了PID列,由于了局表中的主表信息会被清空,以是我们必要借助PID列来断定数据的附属干系。
先将一切主表信息增加进#b表中,由于是主表的信息,以是我们初始化PID列的值为0:
insertinto#b(ID,name,address,sort,PID)
select*,0from#at1
whereid=(selectmin(id)from#at2wheret1.name=t2.nameandt1.address=t2.address)
然后将别的的从表数据增加到#b中,记得要将主表的ID值填到从表的PID列了。
insertinto#b(ID,name,address,sort,PID)
selectt1.ID,,,t1.Sort,t2.IDfrom#at1,#bt2
wheret1.name=t2.nameandt1.address=t2.addressandt1.idt2.id
到这里,实在我们的数据已增加进#b表了,只是还未能按准确的按次来显现,以下图:
我们还必要给数据准确的排序:
update#bsetPID=IDwherepid=0
select*from#borderbypidasc,idasc
如许,我们就完成想要的功效了,最初了局以下图:
最初记的删除一时表哦
droptable#a
droptable#b
虽然可以将一个droptable语句转换成先delete再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。 比如日志传送、比如集群。。。 Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。 是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。 多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油 可以动态传入参数,省却了动态SQL的拼写。
页:
[1]