189 8069 5689

mysql中怎么更新,mysql怎么更新版本

mysql statistics 如何更新

mysql statistics 如何更新

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟主机、营销软件、网站建设、无为网站维护、网站推广。

通常执行update statistics的方法是:

1 对表中不带索引的字段执行update statistics medium,每个表执行一次。一般情况下,缺省参数就足够了。对于特别大的表(执行update statistics时,通常把超过26570条记录的表定义为特别大的表),可以带参数resolution1.00.99。

2 对表中带有索引的字段执行update statistics high,每个字段执行一次。

3 对表中带有复合索引的字段执行update statistics low,每个表执行一次。

4 对每一个小表执行update statistics high。

mysql 我如何查询一批数据后,并更新这批数据

有时候我们会不小心对一个大表进行了 update,比如说写错了 where 条件......

此时,如果 kill 掉 update 线程,那回滚 undo log 需要不少时间。如果放置不管,也不知道 update 会持续多久。

那我们能知道 update 的进度么?

实验

我们先创建一个测试数据库:

快速创建一些数据:

连续执行同样的 SQL 数次,就可以快速构造千万级别的数据:

查看一下总的行数:

我们来释放一个大的 update:

然后另起一个 session,观察 performance_schema 中的信息:

可以看到,performance_schema 会列出当前 SQL 从引擎获取的行数。

等 SQL 结束后,我们看一下 update 从引擎总共获取了多少行:

可以看到该 update 从引擎总共获取的行数是表大小的两倍,那我们可以估算:update 的进度 = (rows_examined) / (2 * 表行数)

????小贴士

information_schema.tables 中,提供了对表行数的估算,比起使用 select count(1) 的成本低很多,几乎可以忽略不计。

那么是不是所有的 update,从引擎中获取的行数都会是表大小的两倍呢?这个还是要分情况讨论的,上面的 SQL 更新了主键,如果只更新内容而不更新主键呢?我们来试验一下:

等待 update 结束,查看 row_examined,发现其刚好是表大小:

那我们怎么准确的这个倍数呢?

一种方法是靠经验:update 语句的 where 中会扫描多少行,是否修改主键,是否修改唯一键,以这些条件来估算系数。

另一种方法就是在同样结构的较小的表上试验一下,获取倍数。

这样,我们就能准确估算一个大型 update 的进度了。

怎么UPDATE 整个数据库 mysql的

第一种,很简单,适用于任何存储引擎。

1. 下载并安装好新版本的MySQL数据库,并将其端口改为3307(避免和旧版本的3306冲突),启动服务。

2. 在新版本下创建同名数据库。

# mysqldump -p3307 -uroot create mysqlsystems_com

3. 在旧版本下备份该数据库。

# mysqldump -p3306 -uroot mysqlsystems_com mysqlsystems_com.bk

Note: 你也可以加上–opt选项,这样可以使用优化方式将你的数据库导出,减少未知的问题。

4. 将导出的数据库备份导入到新版本的MySQL数据库中。

# mysql -p3307 -uroot mysqlsystems_com mysqlsystems_com.bk

5. 再将旧版本数据库中的data目录下的mysql数据库全部覆盖到新版本中。

# cp -R /opt/mysql-5.1/data/mysql /opt/mysql-5.4/data

Note: 大家也都知道这个默认数据库的重要性。

6. 在新版下执行mysql_upgrade命令,其实这个命令包含一下三个命令:

# mysqlcheck –check-upgrade –all-databases –auto-repair

# mysql_fix_privilege_tables

# mysqlcheck –all-databases –check-upgrade –fix-db-names –fix-table-names

Note: 在每一次的升级过程中,mysql_upgrade这个命令我们都应该去执行,它通过mysqlcheck命令帮我们去检查表是否兼容新版本的数据库同时作出修复,还有个很重要的作用就是使用mysql_fix_privilege_tables命令去升级权限表。

7. 关闭旧版本,将新版的数据库的使用端口改为3306,重新启动新版本MySQL数据库。到此,一个简单环境下的数据库升级就结束了。

第二种,同样适用任何存储引擎。

1. 同样先安装好新版本的MySQL。

2. 在旧版本中,备份数据库。

# mkdir /opt/mysqlsystems_bk ; mysqldump -p3306 -uroot –tab=/opt/mysqlsystems_bk mysqlsystems_com

Note: –tab选项可以在备份目录mysqlsystems_bk下生成后缀为*.sql和*.txt的两类文件;其中,.sql保存了创建表的SQL语句而.txt保存着原始数据。

3. 接下来在新版本的数据库下更新数据。

# mysqladmin -p3307 -uroot create mysqlsystems_com

# cat /opt/mysqlsystems_bk/*.sql | mysql -p3307 -uroot mysqlsystems_com ( Create Tables )

# mysqlimport mysqlsystems_com /opt/mysqlsystems_bk/*.txt ( Load Data )

4. 之后的所有步骤与第一种方法的后三步5、6、7相同。

第三种,适用于MyISAM存储引擎,全部是文件间的拷贝。

1. 安装。

2. 从旧版本mysqlsystems_com数据库下将所有.frm、.MYD 和.MYI文件拷贝到新版本的相同目录下。

3.之后的步骤依然同于第一种的后三步。

mysql中的update语句怎么写

SQL UPDATE 命令

如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。

具体语法参考:

from 树懒学堂 - 一站式数据知识平台

注意:

你可以同时更新一个或多个字段。

你可以在 WHERE 子句中指定任何条件。

你可以在一个单独表中同时更新数据。

当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。

MySql更新操作的问题

很好几种思路,不知道是否适用于PHP。下述描述仅提供思路,不考虑具体语法。

1. 写一个update函数,参数为Person对象p, 按照p对象的ID,用p对象中的值更新全部字段(id除外)

update person set name=p.getName(), sex=p.getSex(), ... where person_id=p.getId()

2. 写一个update函数,参数有两个,一个ID,一个Map,Map中存放若干 name-value对

String sql = "update person set ";

if(map.get("name") != null) sql += "name=" + map.get("name");

if(map.get("sex") != null) sql += "sex=" + map.get("sex");

...

sql += " where person_id=" + id;

3. 写一个通用的update方法,仅用来更新一个字段,参数有三个,id, name, value

String sql = "update person set " + name + "=" + value + " where person_id=" + id;

4. 其他一些思路。

大家可以一起讨论思路是否可行。


文章标题:mysql中怎么更新,mysql怎么更新版本
标题URL:http://jkwzsj.com/article/dschoii.html

其他资讯