인프런 커뮤니티 질문&답변

sakuraibbo님의 프로필 이미지

작성한 질문수

[2024 리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]

코드 패턴으로 쉽게 접근하는 pymysql 기반 MySQL 수정과 삭제 (업데이트)

파이썬에서 UPDATE 구문사용 시

24.04.10 10:00 작성

·

253

·

수정됨

0

OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')


해당 오류가 발생합니다. 아래는 제 소스코드입니다

사실 수업과 다를 바는 없다고 생각은 드는데..

다른 구문은 다 정상작동하는데 UPDATE 구문만 작동을 안하는데 이유가 있을까요? 전체 오류 메시지도 사진으로 첨부합니다

 

Workbench에서도 동일한 오류가 발생합니다 ㅠㅠㅠㅠ

 

#1. 라이브러리 import

import pymysql

#2. 데이터베이스에 접속하기

## host, port 등등은 mysql에서 확이

db = pymysql.connect(

host='localhost',

port=3306,

user='root',

passwd='비밀번호입력',

db='ecommerce',

charset='utf8')

#3. 커서 가져오기

cursor = db.cursor()

#4.sql 구문 만들기(INSERT, CREATE, DELETE 등등)

SQL = """

UPDATE product SET

TITLE ='달리샵린넨원피스 뷔스티에 썸머 가디건 코디전',

ORI_PRICE=33000,

DISCOUNT_PRICE=9900,

DISCOUNT_PERCENT=70

WHERE PRODUCT_CODE = '215673141'

"""

 

#5 SQL 구문 실행하기

cursor.execute(SQL)

 

#6 DB에 Complete 하기

db.commit()

#7 DB 종료하기

db.close()

 

스크린샷 2024-04-10 095937.png

답변 2

0

sakuraibbo님의 프로필 이미지
sakuraibbo
질문자

2024. 04. 10. 10:22

노트북 재부팅하니 해결은 되었습니다...

근데 정확한 이유는 아직도 모르겠습니다 ㅠㅠ

 

주피터 노트북으로 수업하다가

딱 한번 db.close() 안한 것이 영향을 준 것일까요?

0

인프런 AI 인턴님의 프로필 이미지

2024. 04. 10. 10:06

안녕하세요, 인프런 AI 인턴입니다.

sakuraibbo님의 질문 관련하여, “OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')” 오류는 데이터베이스 내에서 락 대기 시간이 초과되어 나타나는 오류입니다. 이 문제는 대체로 데이터베이스 내의 트랜잭션이 서로 충돌하거나, 특정 작업이 너무 오래 걸리면서 발생합니다.

유사한 문제가 다루어진 여러 게시물 중 하나에서는, 해당 오류 발생 시 해결 방법에 대해 설명하고 있는데, 이와 관련된 mysql [실전] 크롤링과 데이터베이스 db와 프로그래밍 코드 작성과 팁 2 질문입니다 에서 좀 더 자세한 해결 방법을 제공하고 있습니다. 특히 해당 게시물에서는 오류의 원인을 이해하고 처리하는 방법에 대해 폭넓게 다루고 있어 도움이 될 것입니다.

기본적으로, Lock wait timeout exceeded 오류를 해결하기 위해 몇 가지 접근 방법이 제안됩니다:

  1. SQL 트랜잭션 최적화: 오류가 발생한 특정 SQL 쿼리나 관련 로직을 최적화하여 실행 시간을 줄이는 방법입니다.
  2. DB 설정 조정: MySQL 설정 중 innodb_lock_wait_timeout 값을 조정하여 락 대기 시간을 늘리는 방법입니다. 하지만 이는 일시적인 해결책일 수 있으므로, 근본적인 문제 해결을 위해서는 첫 번째 방법을 권장합니다.
  3. 진행 중인 트랜잭션 확인: 데이터베이스에 현재 진행 중이거나 막혀 있는 트랜잭션이 있는지 확인하고, 필요시 해당 트랜잭션을 종료하여 문제를 해결하는 방법입니다.

해당 오류는 다소 복잡한 데이터베이스의 내부 작업과 관련이 있으므로, 실제 문제 해결을 위해서는 데이터베이스 관리 및 트랜잭션 처리에 대한 이해가 필요할 수 있습니다. sakuraibbo님 경우엔 Workbench에서도 같은 오류가 발생했다고 했으므로, 동일한 트랜잭션이 데이터베이스 내 락을 유발하고 있는 것은 아닌지 확인해보시는 것도 좋겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.