MySQL通过删除旧数据并保持行数相同来添加新数据

时间:2017-07-21 11:48:21

标签: mysql sql mariadb

我有一个test2表,它是这样创建的:

CREATE TABLE test2(
name VARCHAR(20),
time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
);

现在我想在表中只存储5行。因此,每次添加数据时,它都会检查行数是否为5,然后删除最旧的数据并添加新数据,否则只会添加数据。这是代码:

IF(COUNT(name) FROM test2 >= "5") 
THEN 
(DELETE FROM test2 WHERE time = MIN(time) AND (INSERT INTO test2 (name) 
VALUE('icecream')));
ELSE 
(INSERT INTO test2(name) VALUE('icecream'))
END IF;

但是这段代码在IFELSE语句中显示了2个错误。重新格式化以获得正确的输出。

2 个答案:

答案 0 :(得分:1)

这应该可以正常工作。当然你需要程序来做,你不能同时进行SELECT,DELETE和INSERT

CREATE PROCEDURE `add_data`(IN data VARCHAR(20))
BEGIN
  DECLARE c INT;
  SELECT COUNT(name) FROM test2 INTO c;
  IF(c >= 5) THEN 
    DELETE FROM test2 ORDER BY `time` ASC LIMIT 1;
    INSERT INTO test2 (`name`) VALUE(data);
  ELSE 
    INSERT INTO test2(`name`) VALUE(data);
  END IF;
END

答案 1 :(得分:1)

或者你可以删除第4行并添加第5行。不需要程序,但需要两个查询

DELETE FROM test2 WHERE id IN
(
  SELECT id FROM
  (
    SELECT id FROM test2 ORDER BY ts DESC LIMIT 4,999
  ) t
);
INSERT INTO test2 (`name`) VALUES ('icecream');