仓酷云

标题: 在sql语句中完成数据的主从显现 [打印本页]

作者: 金色的骷髅    时间: 2015-1-16 14:07
标题: 在sql语句中完成数据的主从显现
目前的方案是用mysqlbinlog工具,增加一个flashback参数,输出结果为一个新的binlog文件――姑且叫做flashbacklog,这个flashbacklog顺序执行,可制定某张表和执行到哪个pos,来实现数据库的闪回。明天有位做erp的伴侣在群中问,怎样在sql中完成数据的主从显现呢?详细的就是假如数据的主表信息与上条数据的主表信息不异,就把该条数据的主表信息清空,如许看来起数据的附属干系就很分明了。以下图:
假如原始数据是如许的:
在sql语句中完成数据的主从显现
登录/注册后可看大图


需完成的效果就是如许的:
在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表了,只是还未能按准确的按次来显现,以下图:
在sql语句中完成数据的主从显现
登录/注册后可看大图


我们还必要给数据准确的排序:
update#bsetPID=IDwherepid=0
select*from#borderbypidasc,idasc

如许,我们就完成想要的功效了,最初了局以下图:


最初记的删除一时表哦
droptable#a
droptable#b
虽然可以将一个droptable语句转换成先delete再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。
作者: 金色的骷髅    时间: 2015-1-18 12:00
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
作者: 小妖女    时间: 2015-1-25 19:07
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
作者: 再见西城    时间: 2015-2-9 05:11
比如日志传送、比如集群。。。
作者: 简单生活    时间: 2015-2-27 00:52
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
作者: 若天明    时间: 2015-3-8 19:50
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
作者: 因胸联盟    时间: 2015-3-16 14:46
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
作者: 透明    时间: 2015-3-22 23:46
可以动态传入参数,省却了动态SQL的拼写。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2