MySQL 저장 절차에서 오류를 처리하는 방법
Exit Handler를 계속 선언하거나 선언하여 오류 처리 동작을 지정하여 오류 처리 후에 실행을 진행할 수 있으며 Exit은 현재 블록의 실행을 중지합니다. 2. SQLSTATE 값 (예 : 제약 조건 위반의 경우 '23000')을 사용한 오류를 처리합니다. MySQL 오류 코드 (예 : 중복 항목의 경우 1062) 또는 조건을 먼저 선언하고 핸들러에서 참조하여 더 나은 가독성을위한 이름 지정된 조건; 3. 사용자 삽입 절차와 같은 실제 애플리케이션에서는 중복 키와 같은 특정 오류에 대한 계속 핸들러를 구현하고 메시지 로그를 통과하고 추가 실행을 허용하면서 SQLexception을 위해 종료 핸들러를 사용하여 롤백 트랜잭션을 사용하고 사임으로 오류를 재투로 재투로 재단합니다. 4. GET 진단을 통해 오류 세부 정보를 캡처하여 SQLSTATE, 오류 번호 및 메시지 텍스트를 검색하고 분석을 위해 변수 또는 로그 테이블에 저장하여 로깅 및 디버깅을 향상시킵니다. 5. 트랜잭션에서 데이터 수정을 래핑하고, 로깅 또는 신호 오류를 통한 조용한 실패를 피하고, 사임 한 손잡이 오류를 전파하기 위해 사임을 사용하고, 유지 관리 가능성을위한 명명 된 조건을 선호하고, 핸들러가 올바르게 작동하도록하기 위해 오류 시나리오를 테스트하여 제한된 기본 오류 처리 기능에도 불구하고 강력한 MySQL 스테이 션 시나리오를 구축하는 등 모범 사례를 따릅니다.
MySQL 저장 절차의 오류 처리는 강력한 데이터베이스 응용 프로그램을 구축하는 데 필수적입니다. 적절한 오류 처리가 없으면 제약 위반 또는 유효하지 않은 데이터와 같은 예기치 않은 문제로 인해 절차가 조용히 실패하거나 잘못된 결과를 얻을 수 있습니다. MySQL의 DECLARE HANDLER
구문 및 관련 기능을 사용하여 오류를 효과적으로 관리하는 방법은 다음과 같습니다.

1. DECLARE CONTINUE
사용하거나 DECLARE EXIT HANDLER
MySQL을 사용하면 DECLARE HANDLER
명령문을 사용하여 오류 핸들러를 정의 할 수 있습니다. 이 핸들러는 시술 실행 중에 특정 조건 (오류 또는 경고와 같은)이 발생할 때 발생하는 일을 지정합니다.
두 가지 주요 유형이 있습니다.

-
CONTINUE
: 오류를 처리 한 후 실행이 계속됩니다. -
EXIT
: 실행은 현재 블록을 중지하고 종료합니다 (일반적으로 저장된 절차 또는 기능에 사용).
통사론:
조건 _value 문에 대한 handler_type handler를 선언합니다.
공통 handler_type
: CONTINUE
, EXIT
또는 UNDO
(현재 MySQL에서 지원되지 않음).

2. SQLSTATE, MYSQL 오류 코드 또는 명명 된 조건에 따른 오류 핸들
다음을 기반으로 핸들러를 정의 할 수 있습니다.
a) sqlstate 값
이들은 5 자 표준화 된 오류 코드입니다.
sqlstate '23000'에 대한 계속 핸들러 선언 시작하다 - 중복 키 또는 제약 조건 위반을 처리합니다 set @error_message = '무결성 제약 조건 위반'; 끝;
b) MySQL 별 오류 번호
예를 들어 중복 항목에는 1062
사용하십시오.
1062의 계속 핸들러를 선언하십시오 시작하다 @error_message = '중복 항목 찾기'; @sql_error = 1 세트; 끝;
c) 명명 된 조건 (가독성 향상)
먼저 명명 된 조건을 정의한 다음 핸들러에 사용하십시오.
1062의 duplice_entry 조건을 선언합니다. duplical_entry에 대한 계속 핸들러를 선언하십시오 시작하다 @error_message = '중복 입력이 발생했습니다'; 끝;
3. 실제 예 : 오류 처리와 함께 삽입하십시오
다음은 레코드를 삽입하려고 시도하고 중복 키 오류를 우아하게 처리하는 저장된 절차입니다.
Delimiter $$ 프로 시저 삽입기 생성 ( p_username varchar (50)에서 P_EMAIL VARCHAR (100)에서 )) 시작하다 Sqlexection에 대한 Exit 핸들러를 선언하십시오 시작하다 롤백; 사임; -롤백 후 오류를 다시 줄입니다 끝; 1062의 계속 핸들러를 선언하십시오 시작하다 set @msg = concat ( 'username =', p_username, '이미 존재 함'); error_log (message, created_at)에 삽입 값 (@msg, now ()); 끝; 트랜잭션 시작; 사용자 (사용자 이름, 이메일) 값 (p_username, p_email)에 삽입; 저지르다; 끝 $$ 구분기;
이 예에서 :
-
CONTINUE
핸들러는 중복 키 오류 (1062)를 잡고 로그인하고 절차를 계속할 수 있습니다. - 일반 SQL 예외에 대한
EXIT
핸들러는 롤백을 수행하고RESIGNAL
사용하여 오류를 호출자에게 알리십시오. - 트랜잭션은 데이터 일관성을 보장합니다.
4. 로깅 및 디버깅 팁
오류를 처리 할 때 다음을 고려하십시오.
- 상태를 추적하려면 사용자 정의 변수 (예 :
@error_flag = 1
)를 설정합니다. - 감사 또는 오류 테이블에 오류를 기록합니다.
-
GET DIAGNOSTICS
사용하여 자세한 오류 정보를 검색합니다 (MySQL 5.6에서 사용 가능) :
진단 조건 1. 1 @sqlstate = returned_sqlstate, @errno = mysql_errno, @text = message_text; 선택 @sqlstate, @errno, @text; - 디버깅을 위해
정확한 오류를 검사하려면 핸들러 안에 이것을 추가하십시오.
5. 모범 사례
- 데이터를 수정할 때는 항상 트랜잭션을 사용하고
EXIT HANDLER
ROLLBACK
과 페어링하십시오. - 무음 장애를 피하십시오 - 로그 또는 신호 오류를 적절하게 신호하십시오.
- 로컬로 오류를 처리하려고하지만 여전히 발신자에게 알리면
RESIGNAL
사용하십시오. - 더 나은 코드 가독성 및 유지 보수를 위해 명명 된 조건을 선호합니다.
- 테스트 오류 시나리오 수동으로 (예 : 복제 삽입) 처리기 작동을 확인하십시오.
MySQL 저장된 절차의 오류 처리는 다른 데이터베이스에서와 같이 발전되지 않지만 DECLARE HANDLER
, SIGNAL
및 GET DIAGNOSTICS
받으면 신뢰할 수있는 논리를 구축 할 수 있습니다. 핵심은 일반적인 문제를 예상하고 우아하게 대응하는 것입니다.
기본적으로, 절차 초기에 핸들러를 정의하고, 랩은 트랜잭션에 쓰고, 문제가 발생하면 항상 정리하거나보고합니다.
위 내용은 MySQL 저장 절차에서 오류를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

MySQL에 모든 데이터베이스를 표시하려면 ShowDatabases 명령을 사용해야합니다. 1. MySQL 서버에 로그인 한 후 ShowDatabase를 실행할 수 있습니다. 현재 사용자가 액세스 할 권한이있는 모든 데이터베이스를 나열하도록 명령. 2. Information_Schema, MySQL, Performance_Schema 및 SYS와 같은 시스템 데이터베이스는 기본적으로 존재하지만 권한이 부족한 사용자는이를 볼 수 없을 수 있습니다. 3. SelectSchema_namefrominformation_schema.schemata를 통해 데이터베이스를 쿼리하고 필터링 할 수도 있습니다. 예를 들어, 사용자가 만든 데이터베이스 만 표시하려면 시스템 데이터베이스를 제외합니다. 사용하십시오

기존 테이블에 기본 키를 추가하려면 AddPrimarykey 절을 사용하여 Altertable 문을 사용하십시오. 1. 대상 열에 널 값이없고 복제가 없으며 NOTNULL로 정의되어 있는지 확인하십시오. 2. 단일 열차 기본 키 구문은 Altertable 테이블 이름 AddPrimaryKey (열 이름)입니다. 3. 멀티 컬럼 조합 기본 키 구문은 Altertable 테이블 이름 AddPrimaryKey (열 1, 열 2)입니다. 4. 열에서 NULL을 허용하는 경우 먼저 NOTNULL을 설정하도록 수정을 실행해야합니다. 5. 각 테이블에는 하나의 기본 키만이있을 수 있으며 추가하기 전에 기존 기본 키를 삭제해야합니다. 6. 직접 늘려야하는 경우 modify를 사용하여 auto_increment를 설정할 수 있습니다. 작동하기 전에 데이터를 확인하십시오

MySQL 서비스가 실행 중인지 확인하고 sudosystemctlstatusmysql을 사용하여 확인하고 시작하십시오. 2. 원격 연결을 허용하고 서비스를 다시 시작하기 위해 BAND-ADDRESS가 0.0.0.0으로 설정되어 있는지 확인하십시오. 3. 3306 포트가 열려 있는지 확인하고 포트를 허용하도록 방화벽 규칙을 확인하고 구성하십시오. 4. "AccessDenied"오류의 경우 사용자 이름, 비밀번호 및 호스트 이름을 확인한 다음 MySQL에 로그인하여 MySQL.user 테이블을 쿼리하여 권한을 확인해야합니다. 필요한 경우 사용자를 생성하거나 업데이트하여 'Your_user'@'%'사용과 같은 승인; 5. Caching_sha2_password로 인해 인증이 손실 된 경우

mysqldump를 사용하는 것이 MySQL 데이터베이스를 백업하는 가장 일반적이고 효과적인 방법입니다. 테이블 구조 및 데이터가 포함 된 SQL 스크립트를 생성 할 수 있습니다. 1. 기본 구문은 다음과 같습니다. mysqldump-u [user name] -p [database name]> backup_file.sql입니다. 실행 후 암호를 입력하여 백업 파일을 생성하십시오. 2.-databases 옵션으로 여러 데이터베이스를 백업 옵션 : mysqldump-uroot-p-- databasesdb1db2> multip_dbs_backup.sql. 3. all-databases : mysqldump-uroot-p를 사용하여 모든 데이터베이스를 백업합니다

b-treeindexesarebestformostphpapplications, asysupportequalityandrangequeries, 분류, andareidealforcolumnsusedinwhere, ororderbyclauses;

UnionleMovesDuplicates는 Duplicates; 1.unionperformsDeduplicationBysorting 및 ComcomparingRows, ReturnOnlyUniqueresults, whathitSlowerOnlargedAtasets;

Group_Concat () 함수에서 분리기 키워드를 사용하여 분리기를 사용자 정의 할 수 있습니다. 1. 분리기를 사용하여 구분 기호와 같은 사용자 정의 분리기를 지정하십시오. '분리기는 세미콜론 및 플러스 공간으로 변경할 수 있습니다. 2. 일반적인 예제에는 파이프 문자 '|', space '', 라인 브레이크 문자 '\ n'또는 사용자 정의 문자열 '->'가 포함됩니다. 3. 분리기는 문자열 리터럴 또는 표현식이어야하며 결과 길이는 Group_Concat_Max_Len 변수에 의해 제한되며 SetSessionGroup_CONCAT_MAX_LEN = 100000으로 조정할 수 있습니다. 4. 분리기는 선택 사항입니다

theinoperatorinmysqlchecksifavaluematchesanyinaspecifiedlist, simplifying -multipleorconditions; itworkswithliterals, 문자열, 날짜 및 서브 쿼리, 개선 된 쿼리 리드 가능성, performswellonindexedcolumns, (cautionfornulls와 함께), 및 canbecomedwith
