2009-08-28 6 views

答えて

50

文の区切り文字を;から//に変更します。これは、;をトリガー定義に書くことができるので、MySQLクライアントはそれを完了したことを誤って解釈することはありません。

私が見たように、戻って変更するときは、DELIMITER ;ではなく、DELIMITER;であることに注意してください。

+0

mysql構文またはmysqlシェルコマンドですか? – nafg

+0

mysqlシェルコマンド –

13

SQLでは、各文は区切り文字で閉じます。デフォルトではセミコロン(;)です。トリガでは、複数の文を書く必要があり、それぞれの文はセミコロンで終わります。これらのセミコロンがトリガーステートメントの終わりではないことをMySQLに伝えるには、デリミタを一時的に変更します。 to //ので、MySQLはトリガ文が// econuntersすると終了することを知ります。

1

(ummmm)mysql documentationを読んでください。

delimiterは、mysqlコマンドラインクライアントに送信する各コマンドの最後のマーカーです。

delimiterは、トリガーに関連するだけでなく、トリガーとストアドプロシージャを定義することはセミコロン(;)を含めることを強くお勧めします。それ以外の場合はデフォルトのdelimiterです。

1

シンプルステートメントデリミタの終わり(標準、デフォルトSQLでは;セミコロン)を設定します。 文字を変更すると、SQLで;を使用する場合や、埋め込みSQLを使用している場合(混乱の可能性がある場合)に便利です。同様に、例の//は組み込みSQLに混乱を招く可能性があります。そうしないと、SQLで使用することができます。したがって、アプリケーションとニーズに適した区切り文字を設定するには、DELIMITERを使用してください。

0

例を追加してください:
mysqlシェルコマンドを使っているときは、それぞれの文を閉じるには;の区切り文字を使いました。ただし、ストアプロシージャとトリガを作成する場合は、これらのステートメントにもセミコロン;を追加する必要があります。

> delimiter // 
> create trigger log_students after insert on students 
> for each row 
> begin 
> insert into log_students(change_by, change_at) values(USER(), NOW()); 
> end// 
> delimiter ; 
関連する問題