質問

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