我有一张users
表。用户数量应限制为100.也就是说,一旦用户数达到100,我就不能再添加任何用户了。
我首先想到的是首先查询select * from users
返回的行数。如果返回的行数是< 100,我仍然可以添加更多用户。否则,我不能再这样了。
这将需要2个查询来满足我的需求。知道怎么只用1个查询吗?我曾经使用过trigger
语句,但我想知道这是不是一个好主意。请添加代码段作为示例。
答案 0 :(得分:2)
正如评论所说,通过前端处理此问题的最佳方法..
这是另一个选项 ..
如果表中有Identity列,则可以为此表添加约束。
ALTER TABLE <your_table>
ADD CONSTRAINT chk_users
CHECK( <identity_column> < 100)
答案 1 :(得分:1)
这不是使用RDBMS的正常方式,所以这就是为什么没有一种简单的方法来实现它。
可能我这样做的方法是编写一个存储过程并调用它而不是插入。存储过程本质上将封装您的双查询解决方案,但在数据库层。(编辑 - 在sqlite中没有sprocs)
然而,重要的是要考虑为什么您需要限制用户数量。如果这种情况下你一次只能有100个活跃用户,那么我会强烈考虑存储所有用户,而是存储一个状态,指示它们是否处于活动状态。这使您有机会将非活动用户移动到活动状态,反之亦然......这只是一种情况。
答案 2 :(得分:0)
我认为让数据库确保数据是干净的,这总是一个好主意。
双层方法,你有触发器来确保数据是好的,并且检查应用程序也可能是好的。