3

問題なくストアド プロシージャを作成してきましたがCOUNT()、テーブルの関数の結果を返す単純な関数を作成しようとすると、次のようになります。

エラー 1418: この関数の宣言には、DETERMINISTIC、NO SQL、または READS SQL DATA が含まれておらず、バイナリ ログが有効になっています (安全 性の低い log_bin_trust_function_creators 変数を使用することをお勧めします)。

使用しているので、次のCOUNT()ように変更しますREADS SQL DATAが、エラーが発生します:

エラー 1419: SUPER 権限がなく、バイナリ ログが有効になっています (安全性の低い log_bin_trust_function_creators 変数を使用することをお勧めします)

プロシージャを作成できるのに関数を作成できない理由がわかりません。ロギングは、その領域の問題が何であるかを理解していたとしても、私が実際にアクセスできるものではありません...少しグーグルは、DBレプリケーションまたは何かに関係していることを示唆していますが、これは単純なDBのみです.

4

1 に答える 1

2

binlogは、バックアップから復元されたデータベースをロールフォワードするときにも使用されます。標準で組み込まれています。

関数を異なる時間に実行すると、カウントした行数に応じて異なる値が返されます。そして、binloggingのポイントは、システムをある既知の状態から別の既知の状態に移行することです。ステートメントが再生されると、結果に影響します。解決策は、binloggingに依存していない場合はそれをオフにするか、DBMSがデータの変更に使用されるステートメントの代わりにbinlogにデータ変更を書き込むことができるようにすることです。

それはすべてマニュアルにあります。

于 2012-11-30T00:05:19.123 に答える