Rumah > pangkalan data > tutorial mysql > Mengapa Fungsi MySQL Saya Melemparkan Ralat \'1418 (HY000)\' Berkenaan Pengisytiharan Deterministik?

Mengapa Fungsi MySQL Saya Melemparkan Ralat \'1418 (HY000)\' Berkenaan Pengisytiharan Deterministik?

DDD
Lepaskan: 2024-11-02 12:22:30
asal
253 orang telah melayarinya

Why Does My MySQL Function Throw a

DETERMINISTIK, TIADA SQL, atau MEMBACA DATA SQL dalam Pengisytiharan Fungsi dengan Pengelogan Binari Didayakan

Semasa cuba mengimport pangkalan data ke dalam MySQL, mesej ralat yang menunjukkan bahawa fungsi tidak mempunyai salah satu daripada pengisytiharan berikut dalam pengisytiharannya dan pengelogan binari didayakan mungkin berlaku:

1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
Salin selepas log masuk

Menyelesaikan Isu

Terdapat dua kaedah untuk menyelesaikannya:

  1. Laksanakan yang berikut dalam konsol MySQL:
SET GLOBAL log_bin_trust_function_creators = 1;
Salin selepas log masuk
  1. Tambah yang berikut pada fail konfigurasi mysql.ini:
log_bin_trust_function_creators = 1;
Salin selepas log masuk

Ini melonggarkan pemeriksaan untuk fungsi bukan penentu, iaitu fungsi yang mengubah suai data.

Memahami Perisytiharan Deterministik

Fungsi penentu sentiasa menghasilkan keputusan yang sama untuk parameter input yang sama, manakala fungsi bukan deterministik tidak. MySQL menggunakan pengisytiharan ini semasa pengoptimuman replikasi.

Jenis Pengisytiharan Deterministik

Beberapa jenis pengisytiharan deterministik tersedia:

  • DETERMINISTIC: Mengisytiharkan fungsi sebagai deterministik.
  • TIDAK DETERMINISTIK: Mengisytiharkan fungsi sebagai bukan deterministik.
  • MEMBACA DATA SQL: Mengisytiharkan bahawa fungsi hanya membaca data daripada pangkalan data.
  • TIADA SQL: Mengisytiharkan bahawa fungsi itu tidak mengandungi pernyataan SQL.
  • MENGANDUNGI SQL: Mengisytiharkan bahawa fungsi mengandungi arahan SQL, tetapi tidak membaca atau menulis data.

Amalan Terbaik

Adalah disyorkan untuk menentukan pengisytiharan deterministik dengan betul untuk disimpan berfungsi untuk memastikan replikasi optimum dan integriti data. Dengan mempertimbangkan dengan teliti sifat fungsi dan menggunakan pengisytiharan yang sesuai, anda boleh mencegah ralat dan mengoptimumkan prestasi pangkalan data.

Atas ialah kandungan terperinci Mengapa Fungsi MySQL Saya Melemparkan Ralat \'1418 (HY000)\' Berkenaan Pengisytiharan Deterministik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan