Rumah > pangkalan data > tutorial mysql > Mengapa Saya Mendapat Ralat \'DETERMINISTIC, NO SQL, or READS SQL DATA\' dalam MySQL?

Mengapa Saya Mendapat Ralat \'DETERMINISTIC, NO SQL, or READS SQL DATA\' dalam MySQL?

Barbara Streisand
Lepaskan: 2024-10-31 16:16:02
asal
866 orang telah melayarinya

Why Do I Get the

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)
Salin selepas log masuk

Ralat ini menunjukkan bahawa fungsi yang ditetapkan atau prosedur tersimpan tidak mempunyai salah satu daripada pengisytiharan berikut dalam takrifnya:

  • DETERMINISTIK
  • TIADA SQL
  • MEMBACA DATA SQL

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:

  1. Dayakan Pembolehubah log_bin_trust_function_creators:

    • Dalam konsol MySQL, laksanakan arahan berikut:

      SET GLOBAL log_bin_trust_function_creators = 1;
      Salin selepas log masuk
    • Sebagai alternatif, tambahkan yang berikut pada fail konfigurasi MySQL anda (cth., mysql .ini):

      log_bin_trust_function_creators = 1;
      Salin selepas log masuk

    Mendayakan tetapan ini membolehkan fungsi tanpa pengisytiharan eksplisit dilaksanakan semasa pengelogan binari.

  2. 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
      Salin selepas log masuk
    • Untuk fungsi yang tidak mengandungi sebarang pernyataan SQL, gunakan pengisytiharan NO SQL.

      CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
      Salin selepas log masuk
    • 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
      Salin selepas log masuk

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!

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