通过 like 删除 指定前缀的数据会不会误伤
callmewhy opened this issue · 3 comments
callmewhy commented
在 YTKKeyValueStore 中的 DELETE语句,DELETE from %@ where id like ?
通过 like 删除指定前缀的数据,会不会有一些被误删除?
tangqiaoboy commented
这个SQL是给 - (void)deleteObjectsByIdPrefix:(NSString *)objectIdPrefix fromTable:(NSString *)tableName;
这个接口调用的,这个接口本意就是把一批拥有相同前缀的记录删掉。
如果使用者不合理的安排key,使得相同前缀的集合并不是他本身想要的子集,那应该是有可能误删的。
tangqiaoboy commented
我查了一下,在我的应用中,我主要用这个方法来做一些缓存数据的删除。
在猿题库中,用户的草稿纸(以及用户标记)在用户交卷前一直有效,但是交卷后草稿就可以删除了。每于每张卷子,草稿可能有很多份。
所以我给草稿纸的表记录的key统一加上了试卷id当前前缀,然后就可以交卷后按前缀进行批量删除了,示例代码如下:
// 删除草稿纸信息
- (void)clearScratchDataOnExerciseId:(NSNumber *)exerciseId {
NSString *prefixKey = [NSString stringWithFormat:@"%@-", exerciseId];
[_userStore deleteObjectsByIdPrefix:prefixKey fromTable:UserScratchTable];
}
// 删除用户答题标记
- (void)clearExclusionMarkOnExerciseId:(NSNumber *)exerciseId {
NSString *prefixKey = [NSString stringWithFormat:@"%@-", exerciseId];
[_userStore deleteObjectsByIdPrefix:prefixKey fromTable:UserExclusionTable];
}
callmewhy commented
了解了,ID前缀需要做好控制