Это невозможно сделать с помощью триггера из-за ограничения - Внутри хранимой функции или триггера запрещено изменять таблицу, которая уже используется (для чтения или записи) оператором, который вызвал функция или триггер.
Напишите хранимую процедуру для выполнения логики или сделайте это в приложении.
Хорошо, предположим, что у нас есть таблица, и нам нужно добавить запись и дублированную запись с другой датой, хранимая процедура может помочь нам:
CREATE TABLE table1 (
name VARCHAR(255) DEFAULT NULL,
dt DATE DEFAULT NULL
);
DELIMITER $$
CREATE PROCEDURE add_two_records(IN param_name VARCHAR(255), IN param_dt DATE)
BEGIN
INSERT INTO table1 VALUES(param_name, param_dt);
INSERT INTO table1 VALUES(param_name, param_dt + INTERVAL 1 DAY);
END
$$
DELIMITER ;
Добавить записи:
CALL add_two_records('Rick', '2012-01-16');
Давайте проверим результат:
SELECT * FROM table1;
+------+------------+
| name | dt |
+------+------------+
| Rick | 2012-01-16 |
| Rick | 2012-01-17 |
+------+------------+
Исправлены синтаксические ошибки:
DELIMITER $$
CREATE PROCEDURE add_f(IN param_DATEID TIMESTAMP, IN param_SNO VARCHAR(6), IN param_sub VARCHAR(20), IN param_SCHD INT(4))
BEGIN
IF param_SNO ='math01' THEN
INSERT INTO schtt VALUES(param_DATEID, param_SNO, param_SUB, param_SCHD);
INSERT INTO schtt VALUES(param_DATEID + INTERVAL 7 DAY, param_SNO, param_SUB, param_SCHD);
ELSE IF param_SNO='eng101' THEN
INSERT INTO schtt VALUES(param_DATEID, param_SNO, param_SUB, param_SCHD);
INSERT INTO schtt VALUES((param_DATEID + INTERVAL 1 DAY) + INTERVAL 7 DAY, param_SNO, param_SUB, param_SCHD);
-- You can use this one -
-- INSERT INTO schtt VALUES(param_DATEID + INTERVAL 8 DAY, param_SNO, param_SUB, param_SCHD);
END IF;
END$$
DELIMITER ;
Вы спросили:
Могу ли я ввести строку, которая удалит запись после определенной даты с ПРОЦЕДУРОЙ ...
Да, вы можете сделать это с помощью оператора DELETE + предложения WHERE.