2012-10-01 39 views
0

我有一個users表。用戶數量應限制爲100.也就是說,一旦用戶數量達到100,我無法再添加任何用戶。限制sql中表記錄數的最佳方法

我首先想到的是首先查詢select * from users返回的行數。如果返回的行數是< 100,我仍然可以添加更多的用戶。否則,我不能再做了。

這將需要2個查詢來滿足我的需求。任何想法如何在只有一個查詢中擁有它?我遇到了使用trigger聲明,但我想知道這是不是一個好主意。請以代碼片段爲例。

+1

您正在使用哪個SQL服務器? –

+3

最好的辦法是在應用程序中這樣做我的意思是在前端 – skhurams

+0

同意這可能是最好的做法,因爲@skhurams建議,然後只有一個觸發器作爲備份計劃(如果兩個不同的人添加用戶#100和#101在同一時間,第二會扔) –

回答

2

正如評論說,通過前端處理這種最好的辦法..

這裏是另一種選擇 ..

如果您在表中的標識列,您可以添加此表的約束..

ALTER TABLE <your_table> 
ADD CONSTRAINT chk_users 
CHECK(<identity_column> < 100) 
0

我認爲讓數據庫確保數據是乾淨的(如果可以的話)總是一個好主意。

一個雙層方法,你有觸發器來確保數據是好的並在應用程序中檢查也可能是好的。

1

這是不是真的要使用RDBMS正常的方式,所以這就是爲什麼有沒有一個簡單的方法來做到這一點。

也許我會這樣做的方式是編寫一個存儲過程並調用它而不是插入。存儲過程本質上封裝了您的雙查詢解決方案,但在數據庫層。 (編輯 - 在sqlite沒有sprocs)

但重要的是要考慮爲什麼你需要限制用戶的數量。如果這種情況一次只能有100個活躍用戶,那麼我會強烈考慮將所有用戶存儲起來,而且還要存儲一個狀態來指示它們是否處於活動狀態。這讓你有機會將不活躍的用戶轉移到主動,反之亦然......這只是一種場景。