我有两张桌子:
一个用于活动用户,另一个用于非活动用户。两者都具有用户的全名和他的电子邮件地址。
我希望只有在两个表中不存在(例如他的电子邮件地址)时才能插入新用户。
如果他存在于非活动表中,我将通过将用户从非活动表移动到活动表来重新激活他。
有没有办法通过尝试插入某种查询并捕获异常(如果存在)而不是通过在插入之前检查用户是否存在来实现这一点?
答案 0 :(得分:2)
仅仅因为你的数据量巨大并不意味着你应该把它分成两部分,这会让你很头疼。您不仅会遇到CRUD操作,还会将表连接到其他表。你肯定应该有一个表和一个布尔字段来指示用户是处于活动状态还是非活动状态。
要依次处理大量数据和查询速度,您可以采取其他操作,例如partitioning。
P.s:你要做的是以某种方式重新发明分区。
答案 1 :(得分:0)
通过捕获异常来实现条件逻辑是一种低效的设计。只需先检查一下表中是否存在电子邮件地址,您就会好多了:
IF EXISTS (SELECT 1 FROM InactiveUsers WHERE Email = @new_email)
BEGIN
INSERT INTO ActiveUsers ...
DELETE FROM InactiveUsers ...
END
IF NOT EXISTS (SELECT 1 FROM ActiveUsers WHERE Email = @new_email)
INSERT INTO ActiveUsers...