0

私は非常に単純なトリガーを持っています。私はToad for mysqlツールからそれを作成し、それを展開し、問題なく完璧に動作しました。管理者に本番サーバーにデプロイするように指示したところ、エラーが発生しました。

Phpmyadmin エラー:

1064 - SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4 行目の '' 付近

Mysql コンソール エラー:

エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の 'END' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

尋ねられたとき、彼らは phpmyadmin からコードを実行しており、また mysql コンソールから実行しようとしましたが、エラーが発生しています

同じことがGUIツールから実行され、Webツールまたはコンソールからは機能しないのは、本当にイライラし、イライラします。3 つの異なるツールからの 3 つの異なる動作

その後、同じことを試しましたが、エラーも発生しました。その理由は私を驚かせた

DROP TRIGGER IF EXISTS TRG_ ;
CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW
BEGIN

  DECLARE X INTEGER;
  SELECT COUNT(*) into X FROM users;
  
  IF X >= 16 THEN -- CHANGE THIS NUMBER 
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = 'cant create more users';
  END IF;
 
END;

誰かが私が間違っていることを教えてもらえますか? よくわかりませんが、目的が理解できなかった区切りキーワードに関係していると思います。

4

1 に答える 1

1

この質問を見てください - MySQL: How do I use delimiters in triggers?

トリガーなどのソース オブジェクトを作成するときは、区切り記号を使用する必要があります。DELIMITER は MySQL ステートメントではなく、コンソール コマンドであり、多くの MySQL クライアントがこのコマンドをサポートしています。MySQL コンソールでこのコードを試すことができます -

DROP TRIGGER IF EXISTS TRG_ ;

DELIMITER $$

CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW
BEGIN

  DECLARE X INTEGER;
  SELECT COUNT(*) INTO X FROM users;

  IF X >= 16 THEN -- CHANGE THIS NUMBER 
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = 'cant create more users';
  END IF;

END$$

DELIMITER ;

私が知っているように、いくつかの古い phpmyadmin バージョンは区切り文字をサポートしていません。

于 2012-05-08T07:15:49.910 に答える