关于laravel的逻辑删除deleted_at与mysql唯一索引unique

使用mysql组合key去设置唯一索引unique时,可以避免因各种原因导致的重复脏数据问题,但由于我们绝大多数表都不建议采取物理删除的方式去对待可爱的数据们,因此我们常常使用逻辑删除(软删除)的方式去对错误数据或无效数据进行删除,以便后续追溯及误删除的还原。

现在在使用laravel这一框架后,默认使用的逻辑删除字段为deleted_at,默认为null,删除后为删除时间。而mysql的unique,如果某个在其中的字段为null,其他字段相同,是允许加入的,就导致了用deleted_at作为unique的其中一个字段时,会出现乌龙现象,导致正常存在的数据无法保证唯一,被删除的数据才能根据不同删除时间去保证唯一。

所以原则上不建议直接将deleted_at字段去用做unique的字段组成部分

建议还是用自定义字段去作为unique的组成,且组合的字段集成员都不能允许为null。

比如设置一个int类型的字段,未删除则用0表示,删除的话,则填入删除时的时间戳。(但是这种方式需要做一些处理,在进行删除时额外变更该字段,具体可以百度搜索,这里就不过多赘述了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值