将对MySQL表的插入限制为N行

时间:2018-08-20 09:03:59

标签: php mysql sql mysql-workbench

我已经在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;

2 个答案:

答案 0 :(得分:0)

在以下屏幕中显示“显示过程状态”的结果

screen1

答案 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