2017-08-19 5 views
0

のトリガの更新を行うことができますが、それは、ユーザーとメールの一部であり、具体的何その人のすべてのレジストリに私に修正を行い、更新のトリガーを作成する瞬間に、私は私はどのように私は、彼らは人とそのユーザーとのメールの個人的な記録を入力して人々のBitacoraのは、レジストリの一部のために、それがうまく私にすべてのデータを保持してい一人

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; 

人の例のデータを更新する際に、メールやユーザーものですので、私は知らない最初の時間が十分にそれをしないと、私は二度目の修正時に最初のレコードにも

Iに変更されますすでに置く場所cedula = users_cedulaが、それでもその人のすべてのレコードを変更し、それはあなたの次のテストの前に私に

+0

あなたがしようとしているものは明らかではありませんする。 'bitacorapersonas'テーブルも追加しませんでした。それは何らかの履歴テーブルかレジストリ要求のテーブルですか?次に、そこに挿入して、更新しないでください。そうでない場合は、更新する行を特定する必要があります。現在は、すべての行を 'WHERE cedula = NEW.usuarios_cedula'で更新します。私たちはあなたが意味するかもしれない(単一の)行を知りません。 – Solarflare

+0

は、私はすでにどこcedula = users_cedulaが、それでもその人のすべてのレコードを変更し、それは私が、例えば、私が初めてジョンの電子メールを変更した場合私は何をする必要がある – Lissi29

答えて

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> 
+0

を@Solarflareミス何で、それが示されている置きますブログで私が作った変更は、私は次の時間を変更する場合はジョンのメールは、私はブログの次の行に表示する必要があるため、私は、私は初めてフアンのために変わります。だからこそ私はそのトリガーアップデートをどこで行ったのですか? – Lissi29

+0

トリガーを作成するウルサービスはいつでも更新されます。最新のアップデートはbitacorapersonasです。usuarioNuevo = NEW.usuario、correoNuevo = NEW.correo、correoViejo = old.correo cedula = NEW.usuarios_cedula いつも私と同じことをする、それはブログの最初のレコードのデータを更新する – Lissi29

+0

そして私は既に私がしているような挿入トリガを持っていますか?同じテーブルの(挿入/更新/削除)トリガーを持つことができるので、最初に行うたびにそれらがアクティブになるので、あなたはできますか? – Lissi29

関連する問題