MYSQL - TRIGGER 与 IF + INSERT INTO 结合使用

MYSQL - TRIGGER combined with IF + INSERT INTO

提问人:Laura Castañeda 提问时间:6/13/2023 最后编辑:Paul T.Laura Castañeda 更新时间:6/13/2023 访问量:23

问:

每个人 都

我的代码故意没有主键或外键,所以我正在寻找一个不添加它的解决方案。 我的错误是:

错误代码:1054。“字段列表”中的未知列“cedula”

触发器是问题所在,因为当我放下触发器时,它运行良好,所以我不知道如何创建触发器。我想要的触发器是在一个名为 audit1 的表中包含 INSERT INTO 角色表的重复数据,这样我就可以分辨出哪个 ID 在表角色中是两次或更多次。

希望你能帮助我。我在这里写下我所有的代码。

CREATE DATABASE auditoria;
USE auditoria;

CREATE TABLE personas
(
    cedula BIGINT,
    nombre VARCHAR(30),
    codciudadnacimiento INT,
    codactividadlaboral INT
);

CREATE TABLE ciudadesnacimiento
(
    codciudadnacimiento INT,
    nombreciudadnacimiento  VARCHAR(30)
);

CREATE TABLE actividadeslaborales
(
    codactividadlaboral INT,
    nombreactividadlaboral VARCHAR(30)
);

CREATE TABLE audit1
(
    cedula BIGINT,
    nombre VARCHAR(30),
    observacion VARCHAR(30),
    fecha DATETIME
);

DELIMITER //

CREATE TRIGGER SPT1
AFTER INSERT ON personas
FOR EACH ROW
BEGIN
    IF (cedula = NEW.cedula)
    THEN 
    INSERT INTO audit1  VALUES
    (NEW.cedula, NEW.nombre, 'DUPLICATE ID', NOW());
    END IF;
END //
DELIMITER ;

INSERT INTO ciudadesnacimiento VALUES
(1, 'Bogota'),
(3, 'Cartagena');

INSERT INTO actividadeslaborales VALUES
(1, 'Medico'),
(2, 'Abogado');

INSERT INTO personas VALUES
(100,'Megadeth', 1, 1),
(100,'Megadeth', 1, 1),
(100,'Megadeth', 1, 1),
(200,'Babasonicos', 2, 2),
(200,'Babasonicos', 2, 2),
(200,'Babasonicos', 2, 2),
(300,'Spinetta', 3, 3),
(400,'Paez', 3, 3),
(500,'Charly', 3, 3),
(500,'Charly', 3, 3);

我希望能够将数据插入角色表而不会出现错误。

mysql if-statement 触发 sql-insert

评论

0赞 Frank Heikens 6/13/2023
如果 (cedula = ,cedula 应该从哪里来?它既不是变量,也不是输入。
0赞 Akina 6/13/2023
如果 (cedula = NEW.cedula)你是什么意思??cedula
0赞 Akina 6/13/2023
我想要的触发器是在一个名为 audit1 的表中包含 INSERT INTO 角色表的重复数据,这样我就可以分辨出哪个 ID 在表角色中是两次或更多次。使用 IF EXISTS。

答:

1赞 Akina 6/13/2023 #1

看来你需要在

CREATE TRIGGER SPT1
BEFORE INSERT ON personas
FOR EACH ROW
BEGIN
    IF EXISTS (SELECT NULL FROM personas WHERE cedula = NEW.cedula)
    THEN 
        INSERT INTO audit1  VALUES
        (NEW.cedula, NEW.nombre, 'DUPLICATE ID', NOW());
    END IF;
END

https://dbfiddle.uk/94TG_YmB

评论

0赞 Laura Castañeda 6/14/2023
非常感谢您的帮助。效果很好。