F = FOREIGN KEY 约束L = 日志FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程S = 系统表TF = 表函数
TR = 触发器U = 用户表UQ = UNIQUE 约束(类型是 K)V = 视图X = 扩展存储过程 另:在sqlserver中取得某个数据库中所有表名的sql语句 select sysobjects.name from sysobjects.xtype ='U'SELECT name
WHERE (xtype = 'U') 在数据库的sysobjects表里有这个数据库全部表的信息, xtype值为'U'的就是表名 注意:一般通过上述方法获得全部用户表示都会有一个dtproperties表,SQLSERVER 默认它也是用户表,想要从用户表中排出,需要加上限定条件 status>0,即:select * from sysobjects where xtype='U' and status>0
需要考虑:
目前来看,因为会逻辑删除,所以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。
当被删除的数据,再次被添加时,不做插入 *** 作,直接更新原记录到正常状态。此时原表可以加唯一索引。
这个时候 *** 作历史就丢了,怎么办呢。新加一张表,专门用来记录变更流水。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)