문제

저는 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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top