MySQL ERROR: Unknown column '...' in 'OLD'

Viewed 25

i'm starting with TRIGGERS in MySQL and i started making a backup table for my "inventory table" but i get this error: Error Code: 1054. Unknown column 'anterior_código' in 'OLD'.

The database i'm trying to make is a basic sales product inventory with backup. The code is the following:

Hola, estoy comenzando con TRIGGERS en MySQL y comencé a hacer una tabla de respaldo para mi "tabla de inventario", pero recibo este error: Error Code: 1054. Unknown column 'anterior_código' in 'OLD'

La base de datos que estoy tratando de hacer es un inventario básico de productos de ventas con respaldo. El código es el siguiente:

CREATE TABLE inventario (
    código VARCHAR(4) PRIMARY KEY,
    producto VARCHAR(10) UNIQUE NOT NULL,
    precio INT NOT NULL,
    cantidad INT UNSIGNED NOT NULL
);

CREATE TABLE inventario_respaldo (
    anterior_código VARCHAR(4),
    anterior_producto VARCHAR(10) UNIQUE NOT NULL,
    anterior_precio INT NOT NULL,
    anterior_cantidad INT UNSIGNED NOT NULL,
    nuevo_código VARCHAR(4),
    nuevo_producto VARCHAR(10) UNIQUE NOT NULL,
    nuevo_precio INT NOT NULL,
    nuevo_cantidad INT UNSIGNED NOT NULL,
    usuario VARCHAR(20),
    fecha DATETIME
);

INSERT INTO inventario VALUES ('AT01', 'Bicicleta', 200, 20), ('AT02', 'Microondas', 100, 10), ('AT03', 'Lavamanos', 150, 5);

UPDATE inventario SET cantidad = 90 WHERE código = 'AT02';

DELIMITER //

    CREATE TRIGGER trigger_respaldo 
    BEFORE UPDATE   
    ON inventario FOR EACH ROW  
    BEGIN   
        INSERT INTO inventario_respaldo (anterior_código, anterior_producto, anterior_precio, anterior_cantidad, nuevo_código, nuevo_producto, nuevo_precio, nuevo_cantidad, usuario, fecha)
        VALUES (old.anterior_código, old.anterior_producto, old.anterior_precio, old.anterior_cantidad, new.nuevo_código, new.nuevo_producto, new.nuevo_precio, new.nuevo_cantidad, CURRENT_USER(), NOW()); 
    END //  

DELIMITER ;
1 Answers

There is no old value for these

old.anterior_código, 
old.anterior_producto, 
old.anterior_precio, 
old.anterior_cantidad

in this trigger because you are doing an insert. And the old refers to inventario table not inventario_respaldo table

        INSERT INTO inventario_respaldo (anterior_código, anterior_producto, anterior_precio, anterior_cantidad, nuevo_código, nuevo_producto, nuevo_precio, nuevo_cantidad, usuario, fecha)
        VALUES (old.anterior_código, old.anterior_producto, old.anterior_precio, old.anterior_cantidad, new.nuevo_código, new.nuevo_producto, new.nuevo_precio, new.nuevo_cantidad, CURRENT_USER(), NOW()); 

Related