如何为单个人执行触发器更新

时间:2017-08-19 06:35:37

标签: mysql phpmyadmin

我有一小部分人,他们输入一个人及其用户和邮件的个人记录,对于注册表部分,它可以很好地保存所有数据,但在触发更新时,它会使在那个人的所有注册表中对我的修改具体是用户和邮件的部分,我使用此代码来执行更新的触发器

CREATE TRIGGER Usuarios_AModificar AFTER UPDATE ON usuarios FOR EACH ROW UPDATE bitacorapersonas SET usuarioNuevo = NEW.usuario, correoNuevo = NEW.correo, correoViejo=old.correo,activacionNueva = new.activacion, activacionVieja=old.activacion WHERE cedula = NEW.usuarios_cedula

我的表格如下

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

我不知道,因为在更新一个人的数据时,第一次做什么是邮件和用户做得好,当我第二次修改时,第一次记录也被更改

我已经把cedula = users_cedula放在哪里,但仍然改变了那个人的所有记录,这就是想念我的事情

1 个答案:

答案 0 :(得分:0)

在下一次测试之前,运行此select语句并打印结果。

select * from bitcorapersonas where cedula = <your test cedula>.

这些是您的触发器将更新的行。要更新唯一行,您的where子句需要具有唯一条件。目前还不清楚问题是什么,所以我无法告诉你如何更新触发器。但我猜你需要在你触发where子句中使用usarios.id。

在评论中,您说在更新电子邮件后,您希望在博客中添加新行。在这种情况下,您需要插入而不是更新。如果您想在第一次添加电子邮件时更新原始博客并在其他时间添加行,则需要确定它是您的触发器中的第一次,如下所示:

if OLD.email is null then
   UPDATE <Your Update statement here> 
else
   INSERT <Your insert statement here>