Mysql入门MySQL中UPDATE语句使用的实例教程
《Mysql入门MySQL中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); ? update t_test t set t.password = '***' where t.bs = 2; ? update t_test t set t.password = '*',t.remark = '*' where t.bs = 1; ? update t_test t set t.password = null,t.remark = null where t.bs = 3; ? 二、UPDATE使用中的相关性能问题以及解决办法 UPDATE table_anem SET column_name1 = value1,column_name2 = value2,WHERE ; 如下面的语句将users表中id等于123的记录的age改为24MYSQL应用 UPDATE users SET age = 24 WHERE id = 123; 同样,可以使用UPDATE更新多个字段的值MYSQL应用 UPDATE users SET age = 24,name = 'Mike' WHERE id = 123; 上面的UPDATE语句通过WHERE指定一个条件,否则,UPDATE将更新表中的所有记录的值 你这个sql的问题是,相当于修改ONE表里面所有记录的AGE信息,而修改的过程是,对于每一条ONE里面的记录,去TWO里面查询,再修改.而且,期间很可能会有锁之类的东西. update ONE,TWO set ONE.AGE=TWO.AGE where ONE.ID=TWO.ID AND ONE.AGE != TWO.AGE 当我把数据调到了1000W就更新不了了,下面我来分析原因. 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万条记录)MYSQL应用 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 tmp_open_ip AS u INNER JOIN ip ON u.ip BETWEEN ip.s AND ip.e SET u.address = ip.a 在笔者的电脑上运行了速度非常之慢,执行了一个多小时(4500s)都没有完,也不知道还要多久. CREATE TABLE `tmp_open_address` ( `email` varchar(60) NOT NULL DEFAULT '',`ip` int(10) unsigned NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 执行insert 语句MYSQL应用 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!原来还想去倒杯水、稍事休息一下,结果已经执行完毕.MYSQL应用 到本文写完时,前面的update语句已经执行了5000s,结束仍是遥遥无期. SELECT * FROM `tmp_open_ip` where address!='' 成果只有 11,373,照这个速度,要运行N天....MYSQL应用 《Mysql入门MySQL中UPDATE语句使用的实例教程》是否对您有启发,欢迎查看更多与《Mysql入门MySQL中UPDATE语句使用的实例教程》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |