我有一个关系表,表看起来是这样的插入条目只有一次
------------------------
| client_id | service_id |
------------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 1 | 7 |
| 2 | 1 |
| 2 | 5 |
------------------------
我有新的权限,我需要添加一个名单,我在做什么现在的问题是,例如,如果我有ID为1添加新权限的客户,我做
DELETE FROM myTable WHERE client_id = 1
INSERT INTO ....
有没有更有效的办法,我只能删除那些我以后不会插入,和只添加了新的?
你正在删除的主键,反正这么快,我真的不会担心它。 否则,您必须将您要插入的service_id列表放在一起,并将其作为where条件添加到删除中,如下所示: DELETE FROM myTable WHERE client_id = @myId AND service_id NOT IN(@ serviceIds) 这可能需要更多的内存/时间,而不仅仅是删除。 – robertvoliva 2012-03-29 14:51:06
@robertvoliva:在主键上查找速度非常快,但删除项目可能不会。数据库服务器试图根据主键保持整个表的排列顺序。当你删除项目时,数据库必须确定它是否需要重构它如何存储数据。有点像从书架上拿下一堆书:在某个时候,图书管理员必须花时间转移所有书籍,所以你最终不会得到大部分空的书架。 – StriplingWarrior 2012-03-29 15:04:37