MYSQL -触发器与IF + INSERT INTO组合

noj0wjuj  于 2023-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(110)

大家
我的代码没有主键,也没有外键,所以我正在寻找一个解决方案,而不添加。我的错误是:
错误代码:1054“field list”中的未知列“cedula”
触发器是个问题,因为当我放下触发器时,它工作得很好,所以我不知道如何创建触发器。我想要的触发器是在名为 audit1 的表中有重复的数据,即INSERT INTO personas table,这样我就可以知道哪个ID在personas表中出现了两次或更多次。
希望你能帮我。我把所有的代码都写在这里。

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

我希望能够将数据插入到人物角色表中,而不会出现这种错误。

jjjwad0x

jjjwad0x1#

看来你需要加入

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

相关问题