提问人:Laura Castañeda 提问时间:6/13/2023 最后编辑:Paul T.Laura Castañeda 更新时间:6/13/2023 访问量:23
MYSQL - TRIGGER 与 IF + INSERT INTO 结合使用
MYSQL - TRIGGER combined with IF + INSERT INTO
问:
每个人 都
我的代码故意没有主键或外键,所以我正在寻找一个不添加它的解决方案。 我的错误是:
错误代码: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);
我希望能够将数据插入角色表而不会出现错误。
答:
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
评论
0赞
Laura Castañeda
6/14/2023
非常感谢您的帮助。效果很好。
评论
如果 (cedula = NEW.cedula)
你是什么意思??cedula