我有一个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;
但是这段代码在IF
和ELSE
语句中显示了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');