2013-04-11 101 views
0

我有兩個表:
一個用於活動用戶,另一個用於非活動用戶。兩者都有用戶的全名和他的電子郵件地址。 我希望只有在兩個表中都不存在的情況下(例如他的電子郵件地址)才能插入新用戶。 如果他存在於非活動表中,我將通過將用戶從非活動表移動到活動表來重新激活他。插入行,如果它不在一個表中不存在

有沒有辦法通過試圖插入某種查詢和捕捉異常(如果他存在),而不是通過檢查插入前是否存在用戶?

+0

在試圖插入並檢查其他表上是否存在的表上放置一個觸發器。如果存在,你的舉動。 – xQbert 2013-04-11 12:06:27

+4

難道你不覺得做一個用戶表並使用0或1來指定活動會很聰明嗎? is_active = 0/1 ...這也會使檢查更容易我猜 – CaptainCarl 2013-04-11 12:06:46

+0

可能不是你的選擇,但我會讓他們全都在同一個表中使用布爾字段來指定它們是否處於活動狀態 – OlleR 2013-04-11 12:07:03

回答

2

僅僅因爲你的數據是巨大的,並不意味着你必須在兩天它拆分,這會導致你很多頭痛。您不僅在CRUD操作中遇到麻煩,而且在將表格鏈接到其他表格時也會遇到麻煩。你一定要有一個表格和一個布爾字段來表示用戶是否處於活動狀態。

要處理查詢的大數據和速度,您可以採取其他操作,如partitioning。 P:你試圖做的是以某種方式重新創建分區。

+0

謝謝@jurgenreza。你有一些分區和索引的例子嗎? – Yaniv 2013-04-11 14:50:05

+0

@Yaniv取決於您使用的DBMS。 MySQL的? SQL Server? – jurgenreza 2013-04-11 14:55:03

+0

我正在使用MySQL。謝謝。 – Yaniv 2013-04-11 15:06:28

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... 
+0

好的,但我怎麼知道用戶是否最終被插入? – Yaniv 2013-04-11 14:20:44

+0

我更新了僞代碼;但你不需要檢查用戶是否已經插入 - 插入將工作,否則會引發錯誤。 – 2013-04-11 15:27:20

相關問題