I’m trying to create a trigger that will allow only one record in a database, so it would delete any previous records.
But currently, it doesn’t allow me to insert anything it, because it’s instantly deleted.
DELIMITER $$
CREATE TRIGGER test_insert
BEFORE INSERT ON test
FOR EACH ROW BEGIN
DELETE FROM test WHERE id = NEW.id - 1;
END$$
How would I delete a previously (or all previous) inserted record?
“But currently, it doesn’t allow me to insert anything it, because it’s instantly deleted.”
Acutally, when you do an INSERT, the execution of your trigger should be throwing exception:
(Unless something is radically different in a newer version of MySQL.)
The operation you want to perform (i.e. deleting rows from the same table you are inserting into) cannot be done in a MySQL trigger.
You could use a combination of a UNIQUE KEY and a BEFORE INSERT trigger to prevent more than one row from being inserted. The BEFORE INSERT trigger could set the value of the column that has a unique
key on it to be a static value, then the INSERT statement would throw a duplicate key (“Duplicate entry”) exception.
Then, you could use an
INSERT ... ON DUPLICATE KEY UPDATE ...statement to update the values of columns other than the unique id, e.g.