亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL中UPDATE語句使用的實例教程

2024-07-24 13:08:29
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了MySQL中UPDATE語句使用的實例教程,包括UPDATE的使用中所容易引起的性能問題的分析,需要的朋友可以參考下
 

一、UPDATE常見用法
首先建立測試環境:
 

DROP TABLE IF EXISTS t_test;CREATE TABLE t_test ( bs bigint(20) NOT NULL auto_increment, username varchar(20) NOT NULL, password varchar(20) default NULL, remark varchar(200) default NULL, PRIMARY KEY (bs)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk;  INSERT INTO t_test VALUES (1,'lavasoft','123456',NULL);INSERT INTO t_test VALUES (2,'hello',NULL,NULL);INSERT INTO t_test VALUES (3,'haha',zz,tt);

 
1、set一個字段
在表t_test中設置第二條記錄(bs為2)的password為'***'。

update t_test t   set t.password = '***'  where t.bs = 2;

 
2、set多個字段
在表t_test中設置第一條記錄(bs為1)的password為'*'、remark為'*'。

update t_test t   set t.password = '*', t.remark = '*'  where t.bs = 1;

 
3、set null值
在表t_test中設置第三條記錄(bs為3)的password為null、remark為null。

update t_test t   set t.password = null, t.remark = null  where t.bs = 3;

 
這個是按照標準語法寫的,在不同的數據庫系統中,update還有更多的寫法,但是標準寫法都是支持的。以上三個例子為了說明情況,每次都更新一行。在實際中,可以通過where語句約束來控制更新行數。

二、UPDATE使用中的相關性能問題以及解決方法
UPDATE的功能是更新表中的數據。這的語法和INSERT的第二種用法相似。必須提供表名以及SET表達式,在后面可以加WHERE以限制更新的記錄范圍。

UPDATE table_anem SET column_name1 = value1, column_name2 = value2,  WHERE ;

如下面的語句將users表中id等于123的記錄的age改為24

UPDATE users SET age = 24 WHERE id = 123;

同樣,可以使用UPDATE更新多個字段的值

UPDATE users SET age = 24, name = 'Mike' WHERE id = 123;

上面的UPDATE語句通過WHERE指定一個條件,否則,UPDATE將更新表中的所有記錄的值
百萬級別的數據,對于mysql應該沒有問題。

你這個sql的問題是,相當于修改ONE表里面所有記錄的AGE信息,而修改的過程是,對于每一條ONE里面的記錄,去TWO里面查詢,再修改。而且,期間很可能會有鎖之類的東西。
首先,這種sql不應該出現在業務邏輯里面,而應該是后臺的job里面。
如果一定要這么做,可以試著用相反的方式,如果不一樣的記錄不是特別多,那就找到ONE表里面AGE記錄跟TWO表不一樣的記錄,再修改, 例如大概象下面(可能語法不太對):

update ONE,TWO set ONE.AGE=TWO.AGE where ONE.ID=TWO.ID AND ONE.AGE != TWO.AGE 

當我把數據調到了1000W就更新不了了,下面我來分析原因。
實例:需要根據用戶日志的ip地址計算出其地理地址
表結構:
用戶日志表(200萬條記錄),其中address是待填充的字段:

CREATE TABLE `tmp_open_ip` ( `email` varchar(60) NOT NULL DEFAULT '', `address` varchar(50) NOT NULL DEFAULT '', `ip` int(10) unsigned NOT NULL DEFAULT '0', KEY `email` (`email`), KEY `ip` (`ip`)) ENGINE=MyISAM DEFAULT CHARSET=utf8

另ip地址數據庫表(44萬條記錄)

CREATE TABLE `ip` (`s` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '開始ip',`e` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '結束ip',`a` varchar(50) NOT NULL DEFAULT '',KEY `s` (`s`),KEY `e` (`e`)) ENGINE=MyISAM DEFAULT CHARSET=utf8

需要根據用戶日志表 tmp_open_ip 里的 ip字段到ip地址數據庫表里查詢出對應的地理地址,將地址填充到address字段。
使用如下update語句執行:

UPDATE tmp_open_ip AS u INNER JOIN ip ON u.ip BETWEEN ip.s AND ip.e SET u.address = ip.a

在筆者的電腦上運行了速度非常之慢,執行了一個多小時(4500s)都沒有完,也不知道還要多久。
實在看不過去,于是想到使用insert 是否會快一些,于是重新導一張表 tmp_open_log 與tmp_open_log完全一致。
創建一張表 tmp_open_address,是insert的目標表,為了速度更快,沒建索引:

CREATE TABLE `tmp_open_address` (`email` varchar(60) NOT NULL DEFAULT '',`address` varchar(50) NOT NULL DEFAULT '',`ip` int(10) unsigned NOT NULL DEFAULT '0') ENGINE=MyISAM DEFAULT CHARSET=utf8

執行insert 語句

insert into tmp_open_address (email,address,ip)select l.email,ip.a,l.ip from tmp_open_log as l inner join ip on l.ip between ip.s and ip.e ;/* Affected rows: 2,543,124 Found rows: 0 Warnings: 0 Duration for 3 queries: 16.922 sec. */

不到17s!本來還想去倒杯水、稍事休息一下,結果已經執行完畢。

到本文寫完時,前面的update語句已經執行了5000s,結束仍是遙遙無期。
所以,對于大數據量執行update時,可以考慮改用insert 語句實現,可能麻煩一些,但高速帶來的收益遠大于麻煩!
后記:
直接殺死了update進程,去看看update執行了多少:運行

SELECT * FROM `tmp_open_ip` where address!=''

結果只有 11,373 ,照這個速度,要運行N天....



注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品在线观看| 亚洲国语精品自产拍在线观看| 久久久久久国产三级电影| 97超级碰碰碰| 色综合久久88色综合天天看泰| 中文国产亚洲喷潮| 国产精品视频地址| 最近2019年日本中文免费字幕| 国产精品你懂得| 国产精品久久久久99| 国产69精品久久久久久| 欧美性色视频在线| 精品中文视频在线| 久久久www成人免费精品| 精品一区二区三区电影| 国产精品久久久久久久久免费| 亚洲色图在线观看| 欧美日韩亚洲国产一区| 9.1国产丝袜在线观看| 久久亚洲成人精品| 亚洲影院色无极综合| 在线午夜精品自拍| 欧美丰满老妇厨房牲生活| 日韩久久精品成人| 久久婷婷国产麻豆91天堂| 欧美乱大交xxxxx| 国产成人精彩在线视频九色| 国产精品一区二区三| 色777狠狠综合秋免鲁丝| 欧美一级淫片videoshd| 欧美天堂在线观看| 亚洲欧美激情精品一区二区| 成人免费看片视频| 国产一区二区三区视频免费| 亚洲理论在线a中文字幕| 亚洲www在线| 国产精品爱久久久久久久| 日韩在线观看你懂的| 欧美视频免费在线观看| 日韩精品视频三区| 欧美伦理91i| 亚洲日韩欧美视频| 国产视频丨精品|在线观看| 国产裸体写真av一区二区| 日韩精品中文字幕在线观看| 国产精品久久久一区| 日韩av免费在线| 国产日韩欧美影视| 日韩亚洲欧美中文高清在线| 日韩av在线资源| 欧洲成人性视频| 亚洲精品日韩丝袜精品| 亚洲xxxxx电影| 日韩激情视频在线播放| 色综久久综合桃花网| 国产日韩欧美夫妻视频在线观看| 亚洲精品国产suv| 国产999在线| 国产精品女人网站| 亚洲精品国产精品国自产观看浪潮| 欧美日韩国产第一页| 久久精品国产亚洲一区二区| 欧美小视频在线观看| 91精品中文在线| 中文字幕免费国产精品| 欧美一区在线直播| 欧美成人精品在线播放| 欧美激情视频一区二区三区不卡| 一本色道久久88亚洲综合88| 伊人久久久久久久久久久| 91在线观看免费观看| 日本精品免费一区二区三区| 中文字幕在线日韩| 92国产精品久久久久首页| 国产成人亚洲综合91精品| 中国人与牲禽动交精品| 亚洲乱码一区av黑人高潮| 97国产一区二区精品久久呦| 高清欧美性猛交xxxx黑人猛交| 在线观看视频亚洲| 久久精品久久精品亚洲人| 色午夜这里只有精品| 欧美日韩福利电影| 久久久久久国产免费| 国产精品爽爽ⅴa在线观看| 亚洲欧美综合图区| 国产日韩精品在线观看| 久久精品最新地址| 日韩欧美精品免费在线| 国产精品久久久91| 日韩欧美在线视频日韩欧美在线视频| 欧美午夜激情视频| 欧美日韩免费看| 国产精品露脸自拍| 国产欧美一区二区| 欧美裸体xxxx极品少妇软件| 亚洲精品一区二区三区婷婷月| 欧美激情欧美激情在线五月| 国产成人精品视频| 色噜噜国产精品视频一区二区| 亚洲综合在线小说| 国产精品久久久亚洲| 伊人久久男人天堂| 国产精品久久久久久久天堂| 亚洲欧美日韩一区二区三区在线| 日本亚洲欧美三级| 7777精品视频| 影音先锋欧美在线资源| 国产精品久久999| 91中文字幕一区| 亚洲色图狂野欧美| 国产精品高清在线观看| 国产欧美精品日韩精品| 亚洲欧美日韩精品| 欧美区二区三区| 疯狂做受xxxx欧美肥白少妇| 日韩精品免费电影| 久久精品青青大伊人av| 欧美一区二区三区艳史| 久久在线观看视频| 欧美日韩aaaa| 亚洲sss综合天堂久久| 亚洲少妇中文在线| 欧美性猛交xxxx黑人| 一本一本久久a久久精品综合小说| 青草青草久热精品视频在线网站| 精品免费在线观看| 欧美亚洲另类制服自拍| 亚洲国产精品久久久| 国产精品丝袜久久久久久高清| 91精品久久久久久久久久久久久久| 日韩精品在线第一页| 国产精彩精品视频| 一本大道香蕉久在线播放29| 欧美日韩亚洲精品一区二区三区| 国产成人精品在线| 日韩高清av一区二区三区| 欧美激情2020午夜免费观看| 亚洲人成在线观看| 亚洲毛片一区二区| 亚洲а∨天堂久久精品喷水| 久久久噜噜噜久久久| 日韩av在线不卡| 久久成人人人人精品欧| 久久精品久久久久| 国产激情久久久| 国产亚洲在线播放| 中文字幕日韩欧美在线| 欧美精品日韩www.p站| 亚洲福利视频久久| 亚洲精品国产电影| 亚洲精品v天堂中文字幕| 亚洲黄色av女优在线观看| 国产精品久久久av久久久| 欧美性猛交xxxx黑人猛交| 欧美成人精品在线观看| 国产精品老女人视频| 国产不卡视频在线| 97久久国产精品| 精品视频在线导航| 欧美在线视频播放| 日本中文字幕成人| 伊人激情综合网| 欧美精品在线网站|