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

\u5982\u4f55\u4fee\u6539\u6570\u636e\u5e93\u8868\u4e2d\u7684\u67d0\u4e00\u4e2a\u5b57\u6bb5\u7684\u503c\uff1f

\u4fee\u6539\u65b9\u6cd5\uff1a
\u4f7f\u7528update\u8bed\u53e5\u3002\u8bed\u6cd5\u662f\uff1aupdate table_name set column = value[, colunm = value...] [where condition];
[ ]\u4e2d\u7684\u90e8\u5206\u8868\u793a\u53ef\u4ee5\u6709\u4e5f\u53ef\u4ee5\u6ca1\u6709\u3002
\u4f8b\u5982\uff1aupdate students set stu_name = "zhangsan", stu_gender = "m" where stu_id = 5;
\u5177\u4f53\u64cd\u4f5c\u65b9\u6cd5\uff1a
a lter table table_name add xxoo number(4) default 0 ;
\u56e0\u6b64 \u4e0d\u4ec5\u8981\u4fee\u6539\u5b57\u5178, \u8fd8\u8981\u5237\u65b0\u5168\u90e8\u6570\u636e.
1\uff09 \u5728ALTER sql\u4e2d\u6709\u5e26\u7f3a\u7701\u503c\uff0cORACLE \u4f1a\u76f4\u63a5\u5237\u65b0\u5168\u90e8\u7684\u8bb0\u5f55\u3002
2\uff09 \u5728ALTER sql\u4e2d\u6ca1\u6709\u5e26\u7f3a\u7701\u503c\uff0cORACLE \u53ea\u4f1a\u5f71\u54cd\u5230\u540e\u6765\u7684\u8bb0\u5f55\u3002
1 2 3 4 alter table table_name add xxoo number(4) default null; Table altered\uff0cExecuted in 0.062 seconds\u3002
\u5e26\u6709default null \u5c31\u53ef\u4ee5\u4e86?\uff0c1 2 3 4 alter table table_name add xxoo number(4) default 0;Table altered\uff0cExecuted in 1.625 seconds\uff0c\u539f\u6765\u7684\u8bdd \u8981\u66f4\u65b0\u6240\u6709\u7684\u884c, \u4f1a\u5bfc\u81f4UNDO \u6bb5\u5360\u7528
\u4f7f\u7528\u8bed\u53e5Alter table a add test number(10) default 0;\u66f4\u65b0\u4e00\u4e2a\u5927\u8868\u4e2d\u5b57\u6bb5\u65f6\uff0c\u8868\u6709\u56db\u4e2a\u5206\u533a\uff0c\u6570\u636e\u8fbe\u5230\u51e0\u5341\u4ebf\u884c\uff0c\u589e\u52a0\u4e00\u4e2a\u5b57\u6bb5\u7adf\u7136\u8981\u51e0\u4e2a\u5c0f\u65f6\u7684\u65f6\u95f4\uff0c\u4fee\u6539\u8bed\u53e5\u52a0\u4e0aNologging \uff0c\u600e\u4e48\u6ca1\u6709\u4f5c\u7528\u5462\uff1f\u53bb\u627e\u662f\u4e0d\u662f\u54ea\u6709\u9501\u4e86\u5462\uff0c\u4f7f\u7528\u8bed\u53e5 select *\u3002

\u4fee\u6539\u65b9\u6cd5\uff1a
\u4f7f\u7528update\u8bed\u53e5\u3002\u8bed\u6cd5\u662f\uff1aupdate table_name set column = value[, colunm = value...] [where condition];
[ ]\u4e2d\u7684\u90e8\u5206\u8868\u793a\u53ef\u4ee5\u6709\u4e5f\u53ef\u4ee5\u6ca1\u6709\u3002
\u4f8b\u5982\uff1aupdate students set stu_name = "zhangsan", stu_gender = "m" where stu_id = 5;
\u5177\u4f53\u64cd\u4f5c\u65b9\u6cd5\uff1a
a lter table table_name add xxoo number(4) default 0 ;
\u56e0\u6b64 \u4e0d\u4ec5\u8981\u4fee\u6539\u5b57\u5178, \u8fd8\u8981\u5237\u65b0\u5168\u90e8\u6570\u636e.
1\uff09 \u5728ALTER sql\u4e2d\u6709\u5e26\u7f3a\u7701\u503c\uff0cORACLE \u4f1a\u76f4\u63a5\u5237\u65b0\u5168\u90e8\u7684\u8bb0\u5f55\u3002
2\uff09 \u5728ALTER sql\u4e2d\u6ca1\u6709\u5e26\u7f3a\u7701\u503c\uff0cORACLE \u53ea\u4f1a\u5f71\u54cd\u5230\u540e\u6765\u7684\u8bb0\u5f55\u3002
1 2 3 4 alter table table_name add xxoo number(4) default null; Table altered\uff0cExecuted in 0.062 seconds\u3002
\u5e26\u6709default null \u5c31\u53ef\u4ee5\u4e86?\uff0c1 2 3 4 alter table table_name add xxoo number(4) default 0;Table altered\uff0cExecuted in 1.625 seconds\uff0c\u539f\u6765\u7684\u8bdd \u8981\u66f4\u65b0\u6240\u6709\u7684\u884c, \u4f1a\u5bfc\u81f4UNDO \u6bb5\u5360\u7528
\u4f7f\u7528\u8bed\u53e5Alter table a add test number(10) default 0;\u66f4\u65b0\u4e00\u4e2a\u5927\u8868\u4e2d\u5b57\u6bb5\u65f6\uff0c\u8868\u6709\u56db\u4e2a\u5206\u533a\uff0c\u6570\u636e\u8fbe\u5230\u51e0\u5341\u4ebf\u884c\uff0c\u589e\u52a0\u4e00\u4e2a\u5b57\u6bb5\u7adf\u7136\u8981\u51e0\u4e2a\u5c0f\u65f6\u7684\u65f6\u95f4\uff0c\u4fee\u6539\u8bed\u53e5\u52a0\u4e0aNologging \uff0c\u600e\u4e48\u6ca1\u6709\u4f5c\u7528\u5462\uff1f\u53bb\u627e\u662f\u4e0d\u662f\u54ea\u6709\u9501\u4e86\u5462\uff0c\u4f7f\u7528\u8bed\u53e5 select *\u3002

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 数据库的修改和迁移等工作。

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

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


写一个程序, 先用show tables 语句查出库里的所有表, 放到一个数组里, 遍历这个数组, 用每一个表拼成一个SQL语句 update 表 set flag = 0, 这样以这个数组做一个循环update就可以了

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

  • 鎬庝箞鏍锋壒閲淇敼涓涓狹ysql鏁版嵁搴撲腑鏁版嵁琛ㄧ殑鍓嶇紑?
    绛旓細杩欎簺鏄淇敼琛ㄥ悕鐨勪竴浜泂ql锛屼綘鎶婅繖浜涘间繚瀛樺湪php鏁扮粍涓紝鐒跺悗寰幆璋冪敤 浣嗘槸鏈変釜闂鍝︼紝琛ㄥ悕涓嶈兘閮芥敼鎴恆bc_category_tags鐨勶紝瑕佷箞灏辨槸鍦ㄥ師鏈夎〃鍚嶅墠杩藉姞abc锛岃繖鏍疯〃鍚嶅氨涓嶄細閲嶅浜 鏈夐棶棰樺彲浠ヨ拷闂
  • 濡備綍鍦mysql涓慨鏀规暟鎹簱b1鐨勫悕瀛,姣斿鎶奲1閲嶅懡鍚嶄负b2
    绛旓細鍋囪婧愬簱鍚嶆槸'a',鐩爣搴撳悕鏄'b'棣栧厛鍒涘缓鐩爣搴 create database b;鑾峰彇鎵鏈夋簮搴撶殑琛ㄥ悕 use information_a;select table_name from TABLES where TABLE_A=鈥檅鈥;鐒跺悗鎸夌収浠ヤ笅鍛戒护涓涓涓淇敼 rename table a.[tablename] to b.[tablename];涓涓釜鎵ц涓嬫潵涔嬪悗琛ㄥ氨杞埌鏂扮殑搴撻噷闈浜....
  • 鍦╬hpadmin涓濡備綍鏇挎崲mysql鏁版嵁搴撲腑鏁翠釜鏁版嵁搴撲腑鏌愪釜鍐呭?
    绛旓細Update 鐢ㄩ旓細鏇存柊琛ㄤ腑鍘熸湁鏁版嵁 鍗曠嫭浣跨敤锛屼娇鐢╳here鍖归厤瀛楁 set鍚庨潰锛屾洿鏂板瓧娈靛硷紝鏃㈠彲浠ヤ竴娆′竴椤癸紝涔熷彲浠ヤ竴娆″椤 渚嬪1锛孶pdate table_name Set column_name = new_value Where column_name = some_value 渚嬶細鈥淧erson鈥濊〃涓殑鍘熷鏁版嵁:LastName FirstName Address City Nilsen Fred Kirkegt 56 ...
  • 濡備綍鍦╦ava鏂囦欢涓淇敼Mysql鏁版嵁搴鐨勮褰
    绛旓細閫氬父淇敼璁板綍鐢mysql璇█灏卞彲浠ヤ簡锛屾兂閫氳繃java璇█缂栫▼鏉ュ疄鐜颁慨鏀癸紝灏遍渶瑕佸畨瑁匤DBC椹卞姩绋嬪簭銆傜劧鍚庡氨鍘籄PI閲屾壘java.sql鍖咃紝閲岄潰鐨凷tatement鎺ュ彛閲屾湁璁稿鏂规硶锛堜綔鐢紝鐢ㄤ簬瀹炵幇闈欐佺殑sql璇█骞惰繑鍥炴墍鐢熸垚缁撴灉鐨勫璞★級锛屽綋鐒惰繕鏈涓涓灏辨槸PreparedStatement(棰勭紪璇戠殑瀵硅薄锛夛紝瀹炵幇杩欎袱涓帴鍙d腑鐨勬柟娉曪紝浣犲氨鑳藉疄鐜板垹闄わ紝...
  • mysql 鏁版嵁搴鐨勫鍒舵垨鏄浠姐傚湪澶嶅埗鎴栧浠借繃绋嬩腑瀹炵幇淇敼鏁版嵁搴鍚嶅拰...
    绛旓細濡傛灉my搴撲腑鍙湁灏戦噺鐨勮〃锛岄偅wallcopper 鎻愪緵鐨勬柟妗堟槸鍙鐨勶紝濡傛灉鏄痬y涓殑琛ㄥ緢澶氾紝姣斿璇100涓〃锛岄偅灏辫鎿嶄綔100娆★紝姣旇緝楹荤儲锛涙垜杩欒竟鏈変釜鏂规锛屼綘鍙互璇曡瘯锛屽墠鎻愭槸浣犺琛ㄥ悕鐨勮鍒欏繀椤讳竴鑷达紝灏辨瘮濡傝缁熶竴鍦ㄨ〃鍚嶅悗闈㈠姞123锛岃繖鏍锋槸鍙互鐨勶紱mysql -u root -p瀵嗙爜 --execute="select concat('create ...
  • mysql 鏌ヨ鍜淇敼 鎴鏈変竴涓暟鎹簱 A 閲岄潰鏈夎〃 A1 A2 A1 鏈夊瓧娈 A11(鏁...
    绛旓細鎴戝彧鑳藉啓鍑鸿繖鍑犱釜鎿嶄綔鐨剆ql锛岃嚦浜巗hell璋冪敤浣犺鑷繁鍐欙細1:select * from A1 where A12 is null 2:select A2.* from A2,A1 where A2.A21=A1.A11 3.杩欓噷鏄1鍜2鐨勭粍鍚堝惂锛歴et A1.A12=A2.A22 from A1,A2 where A1.A12 is null and A2.A21=A1.A11 ...
  • 濡備綍鏇存柊mysql鏁版嵁搴琛ㄤ腑鐨勫崟鏉℃暟鎹?
    绛旓細UPDATE table set username='瑕佹敼鐨' WHERE l_id='瑕佹牴鎹殑';棰濓紝鎮ㄦ槸涓嶆槸涓浼氳繕瑕侀棶淇敼鏁翠釜琛ㄧ殑瀛楁閭o紵閮戒竴鏍凤紝鍙绗﹀悎鏉′欢鐨勶紝杩欐牱鍐欓兘鏀瑰彉锛屾敞鎰弚here鍚庨潰鐨勬潯浠跺氨鎴愩
  • 濡備綍灏mysql鏁版嵁搴鐨勮〃涓瓧娈电被鍨嬩负int(瀛樻斁鏃堕棿鎴)鏀涓篸atetime绫诲瀷...
    绛旓細绋冲Ε鐨勫姙娉,琛ㄤ笉澶х殑璇,鐧句竾琛屼互鍐,鍏堝缓绔嬩竴寮犺〃.鍔爐able_bak.灏鏁版嵁鍘熷皝涓嶅姩鐨勫掕繃鍘.鐒跺悗淇敼鍘熸潵鐨勮〃.鏂板缓涓涓datetime瀛楁 鐒跺悗 UPDATE 琛 set 鏂板缓鐨刣atetime瀛楁= FROM_UNIXTIME('鍘熸潵鐨勬椂闂村瓧娈') where id="鎸囧畾涓涓狪D";鍏堝疄楠屼笅,娌¢棶棰樻妸where鏉′欢鍘绘帀.鐒跺悗浣犳柊鐨勫瓧娈典笉灏辨槸datetime瀛楁...
  • MYSQL鏁版嵁搴update select 鎶涓涓琛ㄤ腑鐨鏁版嵁鏀涓哄彟涓涓〃涓殑鏁版嵁,鎬庝箞...
    绛旓細2銆乁PDATE 琛ˋ SET name=(SELECT id FROM 琛˙ WHERE 琛˙.name=琛ˋ.name)銆3銆佹湁涓や釜琛紝table1,table2 , table1 鏄痶able2鐨勭埗琛紝涓や釜琛ㄧ粍鍚堣捣鏉ュ舰鎴愯褰曪紝鐜板湪Table2鏈夊洓鏉¤褰曪紝缁忚繃SQL璇彞鏌ヨ锛岃繖鍥涙潯璁板綍褰㈡垚绗笁涓复鏃惰〃鐨勫洓涓瓧娈碉紝涓嶇煡閬撴湁浠涔堟妧宸ц兘瀹炵幇銆傛敞锛鏁版嵁搴鏄敤ACCESS...
  • mysql濡備綍淇敼鏁版嵁搴鐩綍
    绛旓細mv /var/lib/mysql銆/home/data/ 杩欐牱灏辨妸MySQL鐨勬暟鎹鏂囦欢绉诲姩鍒颁簡/home/data/mysql涓嬨4銆佹壘鍒癿y.cnf閰嶇疆鏂囦欢 濡傛灉/etc/鐩綍涓嬫病鏈塵y.cnf閰嶇疆鏂囦欢锛岃鍒/usr/share/mysql/涓嬫壘鍒*.cnf鏂囦欢锛屾嫹璐濆叾涓涓涓鍒/etc/骞舵敼鍚嶄负my.cnf)涓傚懡浠ゅ涓嬶細[root@test1 mysql]# cp /usr/share/mysql/my-...
  • 扩展阅读:mysql修改表某一个数据 ... 简单的mysql重置root密码 ... 永久免费的仓库 ... 怎么关闭mysql数据库 ... linux修改mysql root密码 ... 强制修改mysql密码 ... sql数据库密码在哪看 ... mysql修改密码命令详细 ... 怎么修改mysql数据库密码 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网