|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
目前的方案是用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再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。 |
|