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