gpt4 book ai didi

mysql - 如何在mysql中创建一个触发器,当从插入中弹出另一个触发器时更新位图的数据

转载 作者:行者123 更新时间:2023-11-29 18:30:04 26 4
gpt4 key购买 nike

我正在开发一个 php 项目,我必须对数据库的所有更改进行审核。我有一个表,其中存储了人员表的更改

CREATE TABLE `personas` (
`cedula` varchar(13) NOT NULL,
`nombres` varchar(30) NOT NULL,
`apellidos` varchar(20) NOT NULL,
`sexo` varchar(10) NOT NULL,
`telefono` varchar(20) NOT NULL,
`direccion` text NOT NULL,
`fnacimiento` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我有一个用户表

CREATE TABLE `usuarios` (
`id` int(10) NOT NULL,
`correo` varchar(80) DEFAULT NULL,
`usuario` varchar(10) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`last_session` datetime DEFAULT NULL,
`activacion` int(15) NOT NULL DEFAULT '0',
`token` varchar(40) NOT NULL,
`token_password` varchar(100) NOT NULL,
`password_request` int(11) NOT NULL DEFAULT '0',
`id_tipo` varchar(20) DEFAULT NULL,
`usuarios_cedula` varchar(13) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

日志如下

CREATE TABLE `bitacorapersonas` (
`idBitacora` int(20) NOT NULL,
`accion` varchar(20) NOT NULL,
`fecha` datetime NOT NULL,
`cedUsuario` varchar(20) DEFAULT NULL,
`nombreUsuario` varchar(13) NOT NULL,
`tipoUsuario` varchar(15) NOT NULL,
`cedula` varchar(13) NOT NULL,
`nombreNuevo` varchar(25) DEFAULT NULL,
`nombreViejo` varchar(20) DEFAULT NULL,
`apellidoNuevo` varchar(30) NOT NULL,
`apellidoViejo` varchar(30) DEFAULT NULL,
`sexoNuevo` varchar(10) NOT NULL,
`sexoViejo` varchar(10) DEFAULT NULL,
`telefonoNuevo` varchar(15) NOT NULL,
`telefonoViejo` varchar(15) DEFAULT NULL,
`direccionNuevo` varchar(40) NOT NULL,
`direccionViejo` varchar(40) DEFAULT NULL,
`fnacimientoNuevo` date NOT NULL,
`fnacimientoViejo` date DEFAULT NULL,
`usuarioNuevo` varchar(15) NOT NULL,
`correoNuevo` varchar(15) NOT NULL,
`correoViejo` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在人员表和用户表中,我为每个表都有一个触发器。但我提出以下内容:当我输入一个人时,数据被分成两行,而不是将它们放在一行中(因为我输入的是同一个人)

触发器如下

CREATE TRIGGER `Personas_AInsertar` AFTER INSERT ON `personas` 
FOR EACH ROW
INSERT INTO bitacorapersonas (accion,fecha,cedUsuario, nombreUsuario,tipoUsuario,cedula,nombreNuevo,apellidoNuevo,sexoNuevo,telefonoNuevo,direccionNuevo,fnacimientoNuevo)
VALUES ('Inserto',NOW(),@identificador,@identificador2,@identificador3,NEW.cedula,NEW.nombres,NEW.apellidos,NEW.sexo,NEW.telefono, NEW.direccion,NEW.fnacimiento)

CREATE TRIGGER `Usuarios_AInsertar` AFTER INSERT ON `usuarios`
FOR EACH ROW
INSERT INTO bitacorapersonas (accion,fecha,cedUsuario, nombreUsuario,tipoUsuario, usuarioNuevo,correoNuevo)
VALUES ('Inserto',NOW(),@identificador,@identificador2,@identificador3,NEW.usuario,NEW.correo)

在注册一个人时,我将其保存在表 bitacora 中,如下所示

enter image description here

enter image description here

我想在 bitacora 中执行更新触发器,以便在记录用户数据并触发触发器时,填充内容与左侧空白字段中的人员输入的字段相同一边,但我不知道该怎么做。如果有人可以帮助我或给我一些建议,我将不胜感激

最佳答案

假设 usuarios_cedulapersonas.cedula 的外键,您可以在第二个触发器中执行此操作:

CREATE TRIGGER `Usuarios_AInsertar` AFTER INSERT ON `usuarios` 
FOR EACH ROW
UPDATE bitacorapersonas
SET usuarioNuevo = NEW.usuario, correoNuevo = NEW.correo
WHERE cedula = NEW.usuarios_cedula

这会将这两列添加到 personas 上的触发器插入的行中。

关于mysql - 如何在mysql中创建一个触发器,当从插入中弹出另一个触发器时更新位图的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45762303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com