2 Stimmen

Syntax für den Auslöser vor der Aktualisierung, um einen Hash zu erzeugen

Wie erhalte ich den nach Aktualisierungen generierten Hash?

thufir@dur:~$ 
thufir@dur:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 138
Server version: 5.1.58-1ubuntu1 (Ubuntu)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use nntp;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------+
| Tables_in_nntp      |
+---------------------+
| articles            |
| newsgroups          |
| newsgroups_articles |
+---------------------+
3 rows in set (0.00 sec)

mysql> describe newsgroups;
+-----------+----------+------+-----+---------+----------------+
| Field     | Type     | Null | Key | Default | Extra          |
+-----------+----------+------+-----+---------+----------------+
| id        | int(11)  | NO   | PRI | NULL    | auto_increment |
| newsgroup | longtext | NO   |     | NULL    |                |
| hash      | char(32) | NO   |     | NULL    |                |
+-----------+----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> show triggers;
+-----------+--------+------------+-----------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
| Trigger   | Event  | Table      | Statement                                           | Timing | Created | sql_mode | Definer        | character_set_client | collation_connection | Database Collation |
+-----------+--------+------------+-----------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
| make_hash | INSERT | newsgroups | BEGIN
    set new.hash = md5(new.newsgroup);
  END | BEFORE | NULL    |          | root@localhost | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+--------+------------+-----------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

mysql> 
mysql> 
mysql> DELIMITER $$
mysql> 
mysql> USE `nntp`$$
Database changed
mysql> CREATE
    -> TRIGGER `nntp`.`make_hash_update`
    -> AFTER UPDATE ON `nntp`.`newsgroups`
    -> FOR EACH ROW
    -> BEGIN
    -> set old.hash = md5(new.newsgroup);
    -> END$$
ERROR 1362 (HY000): Updating of OLD row is not allowed in trigger
mysql> 
mysql> quit;
    -> exit
    -> ^CCtrl-C -- exit!
Aborted
thufir@dur:~$ 

Außerdem sehe ich von der Werkbank aus den alten Abzug:

enter image description here

aber ich sehe nicht, wie man einen zusätzlichen Auslöser hinzufügen kann.

2voto

Thufir Punkte 7650

Es ist nicht nach dem Update, es ist vor dem Update und neu. Ich verstehe die Syntax nicht ganz, aber das erzeugt zumindest keine Syntaxfehler. Hätte gerne die Workbench benutzt:

thufir@dur:~$ 
thufir@dur:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 144
Server version: 5.1.58-1ubuntu1 (Ubuntu)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use nntp;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show triggers;
+-----------+--------+------------+-----------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
| Trigger   | Event  | Table      | Statement                                           | Timing | Created | sql_mode | Definer        | character_set_client | collation_connection | Database Collation |
+-----------+--------+------------+-----------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
| make_hash | INSERT | newsgroups | BEGIN
    set new.hash = md5(new.newsgroup);
  END | BEFORE | NULL    |          | root@localhost | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+--------+------------+-----------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

mysql> show create trigger make_hash;
+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Trigger   | sql_mode | SQL Original Statement                                                                                                                                             | character_set_client | collation_connection | Database Collation |
+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| make_hash |          | CREATE DEFINER=`root`@`localhost` TRIGGER `nntp`.`make_hash`
BEFORE INSERT ON `nntp`.`newsgroups`
FOR EACH ROW
BEGIN
    set new.hash = md5(new.newsgroup);
  END | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

mysql> 
mysql> DELIMITER $$
mysql> 
mysql> USE `nntp`$$
Database changed
mysql> CREATE
    -> TRIGGER `nntp`.`make_hash_update`
    -> BEFORE UPDATE ON `nntp`.`newsgroups`
    -> FOR EACH ROW
    -> BEGIN
    -> set new.hash = md5(new.newsgroup);
    -> END$$
Query OK, 0 rows affected (0.19 sec)

mysql> 
mysql> show triggers;
    -> ^CCtrl-C -- exit!
Aborted
thufir@dur:~$

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X