我正在使用 Python MySQL,需要清理数据库中包含 13328 行的表。
我不能制作一个简单的删除表,因为这个表是孩子,也是其他孩子外键的父亲。如果我尝试 drop table,系统会禁止我。该表使用 ON UPDATE CASCADE、ON DELETE CASCADE 和 InnoDB 定义;该表的主键索引定义为
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。
有什么建议吗?
所有意见和建议都受到高度赞赏和欢迎。