前言
由于数据库要做一个模板库,用于安装包中,因此需要删除那些不需要的数据,只保留一些配置方面的数据,因此要重做auto_increment,还要清空一堆表的数据,但是我发现设置auto_increment和截断表后DBeaver中的auto_increment还是原来的值,数据量也是原来的值,怎么刷新都没用,这就让我十分恼火了,还以为是DBeaver故意搞事情不更新。结果查了一堆资料后发现原来是MySQL自己的问题,innodb不会立即将表信息保存到MySQL的information_schema表中,因此导致在DBeaver即使设置了auto_increment,刷新一下还会还原。
按一下F5后
实则是修改成功的,但是刷新完就还原了,搞得我无法得知这个表是否真的被清空数据,且auto_increment被还原了
初步解决
我看了很多文章说的是修改MySQL的Global settings,但是这个会严重影响MySQL的执行效率,而且我试了一下,也不行,比如说:
SET GLOBAL innodb_stats_on_metadata=on;
然后还有一句是
ANALYZE TABLE {表名};
这个确实有用,但是每次只能刷新一张表,我改了上百张表,得手动执行100多次,而且每次表名还不同,这谁受得了!因此必须要找一个更好的解决方案。
最终解决
import pymysql
connection = pymysql.Connection(
host="127.0.0.1",
port=3306,
user="root",
password='123456'
)
cursor = connection.cursor()
connection.select_db("test_db")
result = cursor.execute("show tables")
allTables: tuple = cursor.fetchall()
for table in allTables:
tableName = table[0]
print(f"table name is {tableName} start analyze")
cursor.execute(f"ANALYZE TABLE {tableName}")
使用pymysql让python连接到自己的数据库,然后查询出所有的表,循环执行ANALYZE TABLE即可。
附录
这样安装是最快且最稳妥的。
原文地址:https://blog.csdn.net/DCTANT/article/details/130196481
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_10823.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!