【问题标题】:MySQL table with fixed number of rows?具有固定行数的 MySQL 表?
【发布时间】:2011-11-24 09:09:40
【问题描述】:

我有桌子documents (id, name, time)。是否有一个特殊的 sql 命令可以将表限制设置为 10 行?

【问题讨论】:

  • 您是要限制表中的行数,还是要限制 select 语句返回的行数?
  • 我需要限制表中的行数
  • 那么请看海姆的回答。这在任何传统意义上都是不可能的。
  • 我还能问你为什么要这样做吗?我确信还有另一种方法可以实现您的目标。
  • 在这个表中是保存的文档名称信息,所以我用这个表来显示“最近10个生成的文档”

标签: mysql sql row


【解决方案1】:

如果只想显示“最近10个生成的文档”,不需要单独的表格。只需对现有表使用查询:

SELECT id, name, `time`
FROM documents
ORDER BY `time` DESC
LIMIT 10

【讨论】:

    【解决方案2】:

    不,您不能对 mysql 表设置限制,您可以通过删除行的触发器来实现。

    【讨论】:

      【解决方案3】:

      所以,如果你有这样一张桌子:

      CREATE TABLE documents (
        `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `name` VARCHAR( 99 ) NOT NULL,
        `time` DATETIME NOT NULL
      ) ENGINE = MYISAM
      

      然后你可以使用这个可怕的查询通过回收具有最低id 字段的行来限制行数:

      INSERT INTO documents (id,name,time)
        SELECT
          IF( (SELECT COUNT(*) FROM documents) < 3 -- max row number you allow
             ,NULL -- just use autoincrement id
             ,(SELECT MIN(id) FROM documents) -- update row with smallest id
          ),
          -- your values to insert
          'name'
          ,'2011-11-11'
        ON DUPLICATE KEY UPDATE
          id   = (SELECT MAX(id)+1 FROM documents) -- new id
          -- your values again, now for update
         ,name = 'name'
         ,time = '2011-11-11'
      

      有人请确认这个查询是否是原子的,我认为是,但谁知道......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多