埋め込み型のmysqlサーバ、つまり埋め込まれたプロセスの生存期間中オンラインのmysqlサーバとのインタフェースをとるために、WindowsのC++アプリケーションでlibmysqld Cライブラリを使用しています。データベースを作成するアプリケーションは、mysql .iniファイルを使用して、グローバルなmysqlインストールフォルダではなく、アプリケーションディレクトリを基準にしてデータディレクトリを作成します。埋め込みmysqlを使用したトリガの作成
私はプログラムで問題なくトリガを作成できます。
status = mysql_query(mysql,
"CREATE TRIGGER del_trigger AFTER DELETE ON table FOR EACH ROW\
INSERT INTO otherTable (col1, col2) VALUES (OLD.col1, OLD.col2)\
");
if (status == 0) {
Log(DEBUG, "Initialize(): <%p> Delete Trigger creation passed ...", this);
}
else {
Log(DEBUG, "Initialize(): <%p> Delete Trigger creation failed with error %s...", this, mysql_error(mysql));
}
私はしかしに実行する問題は、トリガーが呼び出されたときに、私は自分のアプリケーション固有のDATADIR内部のMySQLデータベースを持っていないので、mysqlはてmysql.procテーブルが存在しないことに文句を言うだろうということです。私はCにインストールディレクトリからのmysqlフォルダをコピーしようとしている:\プログラムファイルを\ MySQLの...しかし、私は、MySQLが
Error:Cannot load from mysql.proc. The table is probably corrupted
私は上記のエラーに関連する見ているだけアドバイスを報告する問題に遭遇しています'mysql_upgrade'コマンドを実行します。このコマンドは、独自のdatadirを使用して組み込みデータベースの場合には機能しません。私はすべてのテーブルが作成され、それぞれのトリガーが設定されているが、このmysql.procエラーを回避することはできない。
UPDATE:私もここにいくつかの矛盾した行動を見てい
。私のバージョンのMySQLは "mysql-5.5.16-win32"で、mysql_embedded.exeバイナリが付属しています。このバイナリは、コンソールを開いて、アプリケーションが実行していないときにアプリケーションによって生成されたデータベースファイルを指し示すために使用できます。 mysql_embedded.exeで操作を実行すると、トリガーは問題なく動作します( 'mysql.procはおそらく壊れています'エラー)。だから、libmysqld c apiだけがmysqlシステムテーブルに問題があるようです。