파이썬 MySQL:여러 외래 키 테이블 정리
-
06-07-2019 - |
문제
저는 Python MySQL로 작업 중이며 13328개의 행이 있는 데이터베이스의 테이블을 정리해야 합니다.
이 테이블은 하위 테이블이자 여기에 연결된 다른 하위 외래 키의 아버지이기 때문에 간단한 드롭 테이블을 만들 수 없습니다.테이블을 떨어뜨리려고 하면 시스템이 나를 금지했습니다.테이블은 ON UPDATE CASCADE, ON DELETE CASCADE 및 InnoDB로 정의됩니다.해당 테이블에 대한 Primary_key 인덱스는 다음과 같이 정의됩니다.
productID INT(6) NOT NULL AUTO_INCREMENT ...
PRIMARY KEY (productID,productNO)
그러므로 청소만 하면 됩니다.그러면 다음 입력에 대해 테이블 기본 키 인덱스가 1로 자동 복원됩니다.오른쪽?
이 절차는 아버지 테이블인 다른 테이블에서는 제대로 작동했지만 아버지와 자식 테이블에서는 작동하지 않았습니다.그런데 다른 테이블의 자식이자 아버지인 이 테이블에서는 그 테이블에 갇히게 되었습니다.
코드는 다음과 같습니다. productID는 이 테이블에 대한 기본 인덱스 키입니다.
def clean_tableProduct(self):
getMaxID_MySQLQuery = """SELECT MAX(productID)
FROM product;"""
cleanTabeMySQLQuery="""DELETE FROM product WHERE productID <=%s;"""
self.cursorMySQL.execute(getMaxID_MySQLQuery)
for row in self.cursorMySQL:
self.cursorMySQL.execute(cleanTabeMySQLQuery,(row[0],))
처리 결과를 확인하기 위해 MySQL 콘솔로 이동하면 다음과 같은 메시지가 표시됩니다.
mysql> SELECT MIN(productID)
FROM product;
4615748
mysql> SELECT MAX(productID)
FROM product;
4629075
콘솔에서 동일한 명령을 실행하여 테이블을 정리하면 작동합니다.
mysql> DELETE FROM product WHERE productID <='4629075';
Query OK, 13328 rows affected (0.64 sec)
내가 일반적으로 기대하는 것을 보여줍니다.
그러나 콘솔에서 테이블을 정리한 후 Python 함수로 이동하여 프로그램을 다시 실행하고 테이블을 정리하여 처리를 다시 시작하면 테이블 인덱스가 MIN:1이 아닌 4629076으로 다시 시작됩니다.
어떠한 제안?
모든 의견과 제안을 높이 평가하고 환영합니다.
해결책
테이블에서 모든 레코드를 제거하려면:
truncate table product
다음 ID를 1로 재설정하려면:
ALTER TABLE product AUTO_INCREMENT = 1
또는
SET insert_id;
INSERT INTO product ...;
(이건 테스트해보진 않았습니다.하지만 난 일해야 해)
다른 팁
truncate로 테이블을 정리하는 경우:
TRUNCATE TABLE product
부작용으로 자동 증가 카운터가 재설정됩니다.하지만 수동으로 재설정할 수도 있습니다.
ALTER TABLE product AUTO_INCREMENT = 1
모든 의견과 빠른 피드백에 감사드립니다.그것은 트릭을 해냈습니다!
현재 모습은 다음과 같습니다.
def clean_tableProduct(self):
cleanTabeMySQLQuery = """TRUNCATE TABLE product;"""
self.cursorMySQL.execute(cleanTabeMySQLQuery)
setIndexMySQLQuery = """ALTER TABLE product AUTO_INCREMENT = 1;"""
self.cursorMySQL.execute(setIndexMySQLQuery)