㈠ 没有限制条件的删除数据表的sql语句会删除数据表中的所有数据行
在.NET开发的应用程序中,单项删除数据、选择删除和全部删除功能都是必须具备的。通过添加数据和更新数据保证了SQL Server数据库中存储了数据及数据的正确性。
但是,当某个数据完全不再需要时,可以从数据库中删除,删除分为两种,一种是物理删除,一种是逻辑删除:
1) 物理删除是指从SQL Server数据库中彻底删除。删除后不可再恢复。
2) 逻辑删除是指在SQL Server数据库中做一个删除标记,数据还是存储在数据库中。
在SQL Server数据库中,删除数据可以使用SSMS工具或SQL语句删除。
㈡ sql逻辑删除怎么写具体的代码可以说一下吗
嗯,你可以增加一列: isdelete,0代表未删除,1代表已删除。以后查询的时候在where条件上增加一个判断即可。
㈢ 逻辑删除如何保证数据库记录唯一
需要考虑:
目前来看,因为会逻辑删除,所以shop_id + is_delete不能加唯一索引被删除的会重复。
加上delete_time字段。
建shop_id + file_url + is_delete + delete_time唯一索引。
删除行,同时赋值delete_time。这样删除行就不会冲突了。
新增行,is_delete和delete_time都是0。唯一索引也能保证只会有一条数据。
redis分布式锁有天然的问题。不做考虑(可以参考我的另一片文章 分布式锁 )。
所以,就使用mysql锁。
锁粒度可以为店铺粒度。唯一索引为shopId。
每次更新数据前,先锁shopId这个实体。再执行insert 或 update。
锁粒度也可以为店铺+文件粒度。唯一索引为shop_id+file_url。
每次更新数据前,先锁shop_id + file_url这个实体。再执行insert 或 update。
当被删除的数据,再次被添加时,不做插入操作,直接更新原记录到正常状态。此时原表可以加唯一索引。
这个时候操作历史就丢了,怎么办呢。新加一张表,专门用来记录变更流水。