>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 \'DETERMINISTIC, NO SQL 또는 READS SQL DATA\' 오류가 발생하는 이유는 무엇입니까?

MySQL에서 \'DETERMINISTIC, NO SQL 또는 READS SQL DATA\' 오류가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 16:16:02854검색

Why Do I Get the

오류 이해: "DETERMINISTIC, NO SQL 또는 READS SQL DATA" 선언 요구 사항

데이터베이스를 MySQL로 가져올 때 다음이 가능합니다. 다음 오류가 발생합니다.

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)

이 오류는 정의된 함수 또는 저장 프로시저의 정의에 다음 선언 중 하나가 부족함을 나타냅니다.

  • DETERMINISTIC
  • SQL 없음
  • SQL 데이터 읽기

MySQL에서 바이너리 로깅이 활성화된 경우 데이터 무결성과 복제 일관성을 보장하기 위해 이러한 선언이 필요합니다.

오류 수정

이 문제를 해결하려면 다음 두 가지 방법 중 하나를 활용할 수 있습니다.

  1. log_bin_trust_function_creators 변수 활성화:

    • MySQL 콘솔에서 다음 명령을 실행합니다.

      SET GLOBAL log_bin_trust_function_creators = 1;
    • 또는 다음을 MySQL 구성 파일(예: mysql)에 추가합니다. .ini):

      log_bin_trust_function_creators = 1;

    이 설정을 활성화하면 바이너리 로깅 중에 명시적인 선언 없이 함수를 실행할 수 있습니다.

  2. 추가 함수 또는 프로시저에 대한 적절한 선언:

    • 동일한 입력 매개변수에 대해 항상 동일한 출력을 생성하는 함수의 경우 DETERMINISTIC 선언을 사용하세요. 예:

      CREATE FUNCTION my_function() DETERMINISTIC
      BODY
       -- Your function logic
      END
    • SQL 문이 포함되지 않은 함수의 경우 NO SQL 선언을 사용합니다.

      CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
    • 의 경우 데이터베이스에서 데이터만 읽는 함수의 경우 READS SQL DATA 선언을 사용하세요.

      CREATE FUNCTION my_function() READS SQL DATA
      BODY
       -- Your function logic
      END

결정적 함수 선언 이해

비결정적 함수는 데이터를 수정하거나 예측할 수 없는 입력을 사용하여 동일한 입력 매개변수에 대해 다른 결과를 초래할 수 있습니다. 따라서 성능을 최적화하고 데이터 무결성을 보장하려면 함수 동작을 정확하게 선언하는 것이 중요합니다.

MySQL 설명서는 다양한 함수 및 저장 프로시저 함수 선언 옵션에 대한 포괄적인 가이드를 제공하므로 각각에 대해 정보를 바탕으로 결정을 내릴 수 있습니다. 기능. 잘못된 선언은 실행 계획과 성과에 영향을 미칠 수 있습니다.

위 내용은 MySQL에서 \'DETERMINISTIC, NO SQL 또는 READS SQL DATA\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.