개발
쿼리가 무한 루프에 빠지는 문제
31514
2024. 9. 19. 14:10
상황 및 문제
나는 다음과 같은 파이썬 코드로 MySQL 테이블을 생성했다.
import mysql.connector
# MySQL 연결 설정
mydb = mysql.connector.connect(
host=*****,
user=*****,
password=*****,
database=*****
)
# 커서 생성
mycursor = mydb.cursor()
# 테이블 생성
mycursor.execute("""
CREATE TABLE IF NOT EXISTS table (
...
)
""")
하지만 특정 필드의 이름에 오타가 있다는 사실을 알게 되어 MySQL 서버에 접속하여 DROP TABLE 쿼리문을 실행했지만 무한 루프에 빠지게 되었다.
원인
MySQL 커넥터는 트랜잭션 기반으로 동작한다. 만약 트랜잭션이 자동 커밋되지 않도록 설정되어 있다면, 커서가 열려 있는 동안 트랜잭션이 완료되지 않았을 수 있다. 이는 테이블에 락을 걸고 DROP TABLE 명령이 무한 대기에 빠지게 만들 수 있다.
해결
방법 1)
데이터베이스 연결 시 다음과 같이 autocommit=True를 설정하여 자동 커밋을 활성화한다.
import mysql.connector
# MySQL 연결 설정
mydb = mysql.connector.connect(
host=*****,
user=*****,
password=*****,
database=*****,
autocommit=True
)
방법 2)
트랜잭션을 명시적으로 커밋한다.
mydb.commit()