Rumah >pangkalan data >tutorial mysql >Mengapa Saya Mendapat Ralat \'DETERMINISTIC, NO SQL, or READS SQL DATA\' dalam MySQL?
Memahami Ralat: "DETERMINISTIC, NO SQL, or READS SQL DATA" Keperluan Pengisytiharan
Apabila mengimport pangkalan data ke dalam MySQL, ia mungkin untuk menghadapi ralat berikut:
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)
Ralat ini menunjukkan bahawa fungsi yang ditetapkan atau prosedur tersimpan tidak mempunyai salah satu daripada pengisytiharan berikut dalam takrifnya:
Apabila pengelogan binari didayakan dalam MySQL, pengisytiharan ini diperlukan untuk memastikan integriti data dan ketekalan replikasi.
Pembetulan untuk Ralat
Untuk menyelesaikan isu ini, anda boleh menggunakan salah satu daripada dua kaedah:
Dayakan Pembolehubah log_bin_trust_function_creators:
Dalam konsol MySQL, laksanakan arahan berikut:
SET GLOBAL log_bin_trust_function_creators = 1;
Sebagai alternatif, tambahkan yang berikut pada fail konfigurasi MySQL anda (cth., mysql .ini):
log_bin_trust_function_creators = 1;
Mendayakan tetapan ini membolehkan fungsi tanpa pengisytiharan eksplisit dilaksanakan semasa pengelogan binari.
Tambah Pengisytiharan yang Sesuai dengan Fungsi atau Prosedur:
Untuk fungsi yang sentiasa menghasilkan output yang sama untuk parameter input yang sama, gunakan pengisytiharan DETERMINISTIC. Contohnya:
CREATE FUNCTION my_function() DETERMINISTIC BODY -- Your function logic END
Untuk fungsi yang tidak mengandungi sebarang pernyataan SQL, gunakan pengisytiharan NO SQL.
CREATE FUNCTION my_function() NO SQL BODY -- Your function logic END
Untuk fungsi yang hanya membaca data daripada pangkalan data, gunakan pengisytiharan READS SQL DATA.
CREATE FUNCTION my_function() READS SQL DATA BODY -- Your function logic END
Memahami Perisytiharan Fungsi Deterministik
Fungsi bukan penentu boleh mengubah suai data atau menggunakan input yang tidak dapat diramalkan, yang membawa kepada hasil yang berbeza untuk parameter input yang sama. Oleh itu, adalah penting untuk mengisytiharkan gelagat fungsi dengan tepat untuk mengoptimumkan prestasi dan memastikan integriti data.
Dokumentasi MySQL menyediakan panduan komprehensif kepada pelbagai fungsi dan pilihan pengisytiharan fungsi prosedur tersimpan, membolehkan anda membuat keputusan termaklum bagi setiap fungsi. Pengisytiharan salah boleh menjejaskan rancangan pelaksanaan dan menjejaskan prestasi.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \'DETERMINISTIC, NO SQL, or READS SQL DATA\' dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!