MySQL表有固定行数?

时间:2011-11-24 09:09:41

标签: mysql sql row

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

3 个答案:

答案 0 :(得分:2)

没有你不能在mysql表上设置限制,你可以用删除行的触发器实现这一点。

答案 1 :(得分:2)

所以,如果你有这样的表:

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'

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

答案 2 :(得分:2)

如果您只想显示“最新的10个生成的文档”,则无需单独的表格。只需在现有表格上使用查询:

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