先说背景:某日我测试时一下子删了很重要的东西,一篇重要的文章,立即后悔了,但是却发现没有“回收站”,数据表是直接物理删除的,我的内心是崩溃的……
此后无论做什么,我都会记住这个深刻的教训,给自己留一颗后悔药,总会在建表时留一个is_del
字段以表示是否被删除了……,所有的删除不直接物理删除,然后我就很嘚瑟,再也不怕误删了……
但是现在碰到了一个麻烦,某个字段是唯一索引的,而我暂时不想用这个数据就把它删了,当然不是真删了,用is_del
标示而已,但是问题就是我现在要添加的一个数据和这个“被删除”行里面的唯一字段重复了,导致我现在如果不真的把那个删了的话我就添加不了这行数据了。
我想到了两个解决办法:不知道合不合理:
1:删除时将要删除的数据“剪切”到另外一张“回收站临时表”
2:只剪切要删除的行的部分数据,比如上文中的唯一索引那个字段,将当前的冲突字段数据擦除,放到另外一张临时表上面,用主键对应就可以了。
我总觉得是不是我的想法有问题,总感觉欠妥,但又不知道怎么做,希望有经验的大神解答指点下哈?
如果要足够优化的解,那自然是移到其他表去,这样既不妨碍当前表数据,又利用当前表高效的工作。
如果图方便,可以弄个组合索引,将
is_del
也纳入其中。