Rumah > pangkalan data > tutorial mysql > Mengapa MySQL Melemparkan Ralat Mengenai Fungsi Deterministik Apabila Pengelogan Binari Didayakan?

Mengapa MySQL Melemparkan Ralat Mengenai Fungsi Deterministik Apabila Pengelogan Binari Didayakan?

Mary-Kate Olsen
Lepaskan: 2024-10-31 15:31:02
asal
685 orang telah melayarinya

Why Does MySQL Throw an Error About Deterministic Functions When Binary Logging is Enabled?

Ralat MySQL: "Fungsi ini tidak mempunyai DATA DETERMINISTIC, NO SQL, atau READS SQL dalam pengisytiharannya dan pengelogan binari didayakan"

Apabila cuba mengimport pangkalan data ke MySQL, ralat mungkin berlaku yang menunjukkan bahawa fungsi tidak mempunyai salah satu daripada pengisytiharan berikut dalam pengisytiharannya: DETERMINISTIC, NO SQL, atau READS SQL DATA. Ralat ini timbul apabila pengelogan binari diaktifkan.

Menyelesaikan Ralat:

Ralat ini boleh diatasi dengan dua cara:

  1. Konfigurasikan Konsol MySQL: Jalankan arahan berikut dalam konsol MySQL:

    SET GLOBAL log_bin_trust_function_creators = 1;
    Salin selepas log masuk
  2. Edit Fail Konfigurasi: Tambahkan baris berikut ke fail konfigurasi mysql.ini:

    log_bin_trust_function_creators = 1;
    Salin selepas log masuk

Pengubahsuaian ini membenarkan fungsi bukan deterministik digunakan dengan pengelogan binari. Walau bagaimanapun, jika pengelogan binari dilumpuhkan, tetapan ini tidak menjejaskan ralat.

Memahami Perisytiharan Fungsi:

  • DETERMINISTIK: Menunjukkan bahawa fungsi sentiasa menghasilkan hasil yang sama untuk parameter input yang sama.
  • TIDAK MENENTUKAN: Menunjukkan sebaliknya, bahawa hasil fungsi boleh berbeza-beza untuk parameter input yang sama.
  • MEMBACA DATA SQL: Menentukan secara eksplisit bahawa fungsi hanya akan membaca data daripada pangkalan data.
  • TIADA SQL: Menunjukkan bahawa fungsi tidak mengandungi sebarang pernyataan SQL.
  • MENGANDUNGI SQL: Menunjukkan bahawa fungsi mengandungi arahan SQL tetapi tidak mengubah suai data.

Adalah penting untuk ambil perhatian bahawa fungsi yang mengandungi arahan bukan penentu, seperti NOW() atau UUID(), hendaklah diisytiharkan sebagai NOT DETERMINISTIC. Selain itu, fungsi yang membaca data daripada skema yang tidak direplikasi juga bukan penentu.

Amalan Terbaik:

Pendekatan yang ideal adalah untuk memahami dan menggunakan pengisytiharan deterministik untuk fungsi yang disimpan kerana ia membantu dalam pengoptimuman replikasi. MySQL mengesyorkan secara eksplisit menyatakan salah satu pengisytiharan yang disebut dalam takrifan fungsi yang disimpan untuk mengelakkan kemungkinan ralat.

Atas ialah kandungan terperinci Mengapa MySQL Melemparkan Ralat Mengenai Fungsi Deterministik Apabila Pengelogan Binari Didayakan?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan