-3

テーブル構造は次のとおりです。

mysql> DESC groups;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| PKey         | varchar(64)  | NO   | PRI | NULL    |       |
| group_name   | varchar(64)  | YES  |     | NULL    |       |
| Region       | varchar(128) | NO   |     | NULL    |       |
| Role         | varchar(128) | NO   |     | NULL    |       |
| parent_group | varchar(64)  | NO   | MUL | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

このトリガーを実行すると、コンパイルエラーが発生します

DELIMITER $$
CREATE
    TRIGGER `group_before_delete` BEFORE DELETE
    ON `groups`
    FOR EACH ROW BEGIN
    IF old.parent_group=old.PKey THEN
        UPDATE `Error: deletion RootGroup is prohibited!`;
    ELSE              
        UPDATE groups
        SET parent_group=old.parent_group
        WHERE parent_group=old.Pkey; 
    END IF;
    END$$
DELIMITER ;

エラー1064(42000): SQL構文にエラーがあります。'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。
ELSE
t_group = old.parent_group
t_group = old.PKey;
END IF; ' 6行
目mysql>DELIMITER;


私がここで欠けているものを教えてもらえますか?

4

2 に答える 2

2

UPDATE ステートメントの構文が無効であるため、コードでエラーが発生します。

あなたが与えるリンクは4歳と5歳です!SIGNALステートメントはバージョン 5.5.0 (3 年前にリリース)以降の MySQL で使用できるため、これら 2 つの Web ページで説明されているハックを使用することは、実際には良い考えではありません。代わりに、SIGNAL ステートメントを使用してください。

: コメントから、OP は MySQL 5.5 を使用していSIGNALないため、利用できないことがわかります。

于 2012-11-20T17:23:05.903 に答える
1

IFステートメントでは、以下は有効なSQLステートメントではありません。

UPDATE `Error: deletion RootGroup is prohibited!`;

これは次のようになります。

IF old.parent_group=old.PKey THEN
    UPDATE `Error: deletion RootGroup is prohibited!` set x=1;
ELSE              
    UPDATE groups
    SET parent_group=old.parent_group
    WHERE parent_group=old.PKey; 
END IF;

私はこのように物事をしたことがありません。それは少し醜い方法です。しかし、それがうまくいくなら、一体何でしょう。

于 2012-11-20T17:08:00.380 に答える