0

トリガーを入力した後、コンソールは通常のコマンドに応答しない奇妙な状態に見えます。うっかり区切り文字でそれをやっていますか?

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> show triggers;
Empty set (0.00 sec)

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

mysql> DELIMITER $$
mysql> USE `nntp`$$
Database changed
mysql> CREATE
    -> TRIGGER `nntp.newsgroups.before_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> show triggers;
    -> ^CCtrl-C -- exit!
Aborted
thufir@dur:~$ 
4

1 に答える 1

1

トリガーまたはルーチンの作成が完了したら、区切り記号を元に戻す必要があります。そうしないと、$$以降のすべてのステートメントで同じ区切り記号 (この場合は ) を使用する必要があります。

例えば:

mysql> DELIMITER $$
mysql> USE `nntp`$$
Database changed
mysql> CREATE
    -> TRIGGER `nntp.newsgroups.before_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> DELIMITER ;
mysql> show triggers;

DELIMITERキーワードの 2 番目の使用法に注意してください。

于 2012-07-29T11:18:22.660 に答える