mysql - 数据库触发器 - 表中的最大项目

标签 mysql sql database triggers

所以我正在为网站创建数据库。在这个数据库中,有一个名为“featured”的表。我需要确保在任何给定时间该表中最多有 25 个项目。为了实现这个目标,我创建了一个触发器:

DELIMITER $$

CREATE TRIGGER featured_check AFTER INSERT ON featured
    FOR EACH ROW
        BEGIN
            IF (SELECT COUNT(*) FROM featured) > 25 THEN
                DELETE FROM featured ORDER BY featured_id LIMIT 1;
            END IF;
        END$$

DELIMITER ;

每次将项目插入特色表时,都应激活此触发器。它将计算表中的项目数,如果计数超过 25,则会删除 id 最小的项目。在这种情况下,“featured_id”是一个自动递增的主键。

鉴于所有这些信息,我有两个问题:

  1. 此触发器是否按照我的想法执行操作?我不是数据库专家,我只是想确定一下。
  2. 这是解决此问题的最佳方法吗?有没有更好的方法来防止表中的项目超过 25 个?

最佳答案

您可以通过删除 if 并使用来简化触发代码 sql

DELETE FROM featured
WHERE featured_id IN
      (SELECT MIN(featured_id)
       FROM   featured
       HAVING COUNT(*)>24)

但其他方面对我来说看起来还不错。

关于mysql - 数据库触发器 - 表中的最大项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20105510/

相关文章:

java - 将 MySQL 连接到 JasperReports 服务器

php - 我的更新查询有什么问题?

php - 如何在 Eloquent laravel中检查hasMany关系记录为空

java - 从数据库中存储的时间戳字段仅检索小时

mysql - mysql sql 查询中日期的逻辑

SQL*Plus - 数字列显示十六进制字符

php - 进一步优化这个查询? - 索引但仍然很慢

php - 如何将 Google 搜索结果重定向到动态网页?

php - 超过 64kb 的内容未显示在 WordPress 中

php - 在多个小时内以分钟为单位的时间范围内获取 mySQL 行