我已经在MySQL中创建了一个表。
我希望该表仅存储30行,当超过30行时,我们说是31行,那么该表必须删除旧的30行。
在MySQL中这可能吗?
我使用了以下触发器,但不适用于我。
CREATE TRIGGER my_name
BEFORE INSERT ON try
FOR EACH ROW
BEGIN
DECLARE cnt INT;
SELECT count(*) INTO cnt FROM try;
IF cnt = 30 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You can store only 10 records.';
END IF;
END;
答案 0 :(得分:0)
在以下屏幕中显示“显示过程状态”的结果
答案 1 :(得分:-2)
您可以使用存储过程代替常规的INSERT语句。存储过程将首先根据输入参数添加行,然后根据需要删除旧行。请参见以下示例。您可能必须根据表的列调整CREATE TABLE IF NOT EXISTS `test` (
`id` int(1) NOT NULL AUTO_INCREMENT,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`value` tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
过程的输入参数。
我的示例表架构
DELIMITER //
CREATE DEFINER=`root`@`%` PROCEDURE `limitedInsert`(
IN `parameter_1` INT
)
BEGIN
DECLARE rowsNumber INT;
DECLARE idToRemove INT;
insert into test(value) values(parameter_1);
select count(*) into rowsNumber from test;
if rowsNumber > 30 then
select id into idToRemove from test order by timestamp asc limit 1;
delete from test where id = idToRemove;
end if;
END//
DELIMITER ;
过程
call limitedInsert(2);
使用存储过程插入数据
istanbul-instrumenter-loader