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

Php 将MySQL表的插入限制为N行,php,mysql,sql,mysql-workbench,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 SIG

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

可以使用存储过程代替常规INSERT语句。存储过程将首先根据输入参数添加行,然后根据需要删除旧行。请看下面的例子。您可能需要根据表的列调整
limitedInsert
过程的输入参数

我的示例表架构

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);
使用存储过程插入数据

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);

在以下屏幕中,显示显示程序状态的结果


您可以检查此问题:0。创建时间戳列后..,1。插入30行。2.不允许插入。3.并使用update insteadOP,请添加您的查询。没有人能帮你调试这个。你的代码对我来说很好,也许你只是没有设置分隔符。问题的删除部分怎么了?@P.Salmon,它是如何与你合作的,??对于删除部分,我不知道如何才能做到。云你帮我使代码只插入30行,然后在超过30行时删除它们并添加新的。