问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何修改mysql一个数据库中所有表某个字段的数据?

发布网友 发布时间:2022-04-24 08:06

我来回答

4个回答

热心网友 时间:2022-04-07 16:21

MySQL 的 Binlog 记录着 MySQL 数据库的所有变更信息,了解 Binlog 的结构可以帮助我们解析Binlog,甚至对 Binlog 进行一些修改,或者说是“篡改”,例如实现类似于 Oracle 的 flashback 的功能,恢复误删除的记录,把 update 的记录再还原回去等。本文将带您探讨一下这些神奇功能的实现,您会发现比您想象地要简单得多。本文指的 Binlog 是 ROW 模式的 Binlog,这也是 MySQL 8 里的默认模式,STATEMENT 模式因为使用中有很多*,现在用得越来越少了。
Binlog 由事件(event)组成,请注意是事件(event)不是事务(transaction),一个事务可以包含多个事件。事件描述对数据库的修改内容。
现在我们已经了解了 Binlog 的结构,我们可以试着修改 Binlog 里的数据。例如前面举例的 Binlog 删除了一条记录,我们可以试着把这条记录恢复,Binlog 里面有个删除行(DELETE_ROWS_EVENT)的事件,就是这个事件删除了记录,这个事件和写行(WRITE_ROWS_EVENT)的事件的数据结构是完全一样的,只是删除行事件的类型是 32,写行事件的类型是 30,我们把对应的 Binlog 位置的 32 改成 30 即可把已经删除的记录再插入回去。从前面的 “show binlog events” 里面可看到这个 DELETE_ROWS_EVENT 是从位置 378 开始的,这里的位置就是 Binlog 文件的实际位置(以字节为单位)。从事件(event)的结构里面可以看到 type_code 是在 event 的第 5 个字节,我们写个 Python 小程序把把第383(378+5=383)字节改成 30 即可。当然您也可以用二进制编辑工具来改。
找出 Binlog 中的大事务
由于 ROW 模式的 Binlog 是每一个变更都记录一条日志,因此一个简单的 SQL,在 Binlog 里可能会产生一个巨无霸的事务,例如一个不带 where 的 update 或 delete 语句,修改了全表里面的所有记录,每条记录都在 Binlog 里面记录一次,结果是一个巨大的事务记录。这样的大事务经常是产生麻烦的根源。我的一个客户有一次向我抱怨,一个 Binlog 前滚,滚了两天也没有动静,我把那个 Binlog 解析了一下,发现里面有个事务产生了 1.4G 的记录,修改了 66 万条记录!下面是一个简单的找出 Binlog 中大事务的 Python 小程序,我们知道用 mysqlbinlog 解析的 Binlog,每个事务都是以 BEGIN 开头,以 COMMIT 结束。我们找出 BENGIN 前面的 “# at” 的位置,检查 COMMIT 后面的 “# at” 位置,这两个位置相减即可计算出这个事务的大小,下面是这个 Python 程序的例子。
切割 Binlog 中的大事务
对于大的事务,MySQL 会把它分解成多个事件(注意一个是事务 TRANSACTION,另一个是事件 EVENT),事件的大小由参数 binlog-row-event-max-size 决定,这个参数默认是 8K。因此我们可以把若干个事件切割成一个单独的略小的事务
ROW 模式下,即使我们只更新了一条记录的其中某个字段,也会记录每个字段变更前后的值,这个行为是 binlog_row_image 参数控制的,这个参数有 3 个值,默认为 FULL,也就是记录列的所有修改,即使字段没有发生变更也会记录。这样我们就可以实现类似 Oracle 的 flashback 的功能,我个人估计 MySQL 未来的版本从可能会基于 Binlog 推出这样的功能。
了解了 Binlog 的结构,再加上 Python 这把瑞士军刀,我们还可以实现很多功能,例如我们可以统计哪个表被修改地最多?我们还可以把 Binlog 切割成一段一段的,然后再重组,可以灵活地进行 MySQL 数据库的修改和迁移等工作。

热心网友 时间:2022-04-07 17:39

SELECT
  CONCAT( 'UPDATE ',  table_name, ' SET  flag = 0;' AS  `准备要执行的sql`
FROM
  information_schema.tables
WHERE
  table_schema = 'database 的名字';

查询完毕以后,复制出查询结果, 粘贴一下, 执行。

追问谢谢,但是现在有新的需求,就是先要判断flag的值,如果为1的才改为0,不为1的不改,怎么写?

追答SELECT
  CONCAT( 'UPDATE ',  table_name, ' SET  flag = 0  WHERE  flag = 1;'    AS  `准备要执行的sql`
FROM
  information_schema.tables
WHERE
  table_schema = 'database 的名字';

热心网友 时间:2022-04-07 19:14

update databases.* set flag=0;用通配符来替代该数据库下的表名建议在mysql命令行执行

热心网友 时间:2022-04-07 21:05

写一个程序, 先用show tables 语句查出库里的所有表, 放到一个数组里, 遍历这个数组, 用每一个表拼成一个SQL语句 update 表 set flag = 0, 这样以这个数组做一个循环update就可以了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么车险可以分期花呗 请问“有几个虫子怕什么"改为陈述句是"有几个虫子不可怕"。为什么要加... 一只狼身边有一只羊为什么狼不吃羊? 路边有一只羊,过来一只狼,却没有吃羊,为什么? ...有没有一个厂叫【福高】厂的,是做电子产品的。。3Q 明道冒险王百度云如何下载 冒险王2cps联系谁? 350分到400分的二本大学 廊坊高考400分能上什么学校 河北2023年高考400分左右能上什么大学 财务报表信息披露是否及时与完整 信息披露内容包括哪些 mysql 更改表结构 信息披露制度的基本原则是什么? 修改mysql的表类型 如何修改mysql数据库表结构 求近几年上市公司会计信息披露不及时、不完整,和会计信息披露缺少可比性的案例。 信披不及时会影响一周的股价吗? 新三板挂牌公司信息披露不及时或未披露的处理办法? 违规披露、不披露重要信息罪构成要件有哪些 理财产品信息披露不及时是因为什么 小米6cpu835骁龙多少纳米 高通骁龙660和835有什么区别? 骁龙835比骁龙821强多少? 高通骁龙835处理器功能强大吗? MSM8998是什么型号,什么规格? 骁龙8345多少纳米 高通骁龙835较上一代旗舰芯片,有何区别和优势呢? 高通骁龙660和835 高通骁龙835处理器的核心参数有知道的吗? 身份证自助办理机? mysql修改表结构和约束条件语句 身份证自助办理机条件 自助身份证办理机换新证需要提供户口本吗? MySQL如何修改表格的字符集,如何修改某个字段的字符集 身份证自助办理机办理一般多久能拿到证? Mysql中怎么修改表中一个字段的类型 贵阳身份证自助办理机节假日可以办理吗? 我想修改mysql数据库的名字,可以怎么修改 mysql 怎么修改表的comment 补办身份证自助机需要什么,武汉哪些地方有? 要在自助机上办身份证需要什么手续? 哪里有身份证自助办理机? 身份证自助办理机可以办理异地身份证吗? 成都身份证自助办理机哪里有 身份证自助办理需要多久取证? 咸宁身份证自助办理机器在哪 身份证丢了,可以在自助办证机进行补办吗? 这个小区电信网络丢包率奇高怎么破 上网老是丢包,请问是什么问题如何解决?