USE database_name;
命令选择要操作的数据库。,3. **编写SQL更新语句**:使用UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
格式编写更新语句。,4. **执行更新语句**:在MySQL客户端或编程语言中执行更新语句,提交更改到数据库。,5. **检查和确认**:验证更新结果是否符合预期,必要时进行回滚或进一步修改。MySQL的更新过程是一个复杂且精细的操作,涉及多个步骤和日志管理,以下是对MySQL数据库更新过程的详细介绍:
准备阶段
1、创建测试表:
创建一个名为test
的表,包含两个字段:id
(主键)和c
(数值)。
插入三条数据,分别为(1, 1),(2, 2),(3, 3)。
执行更新操作
1、查找记录:
执行器通过引擎接口找到ID为1的数据行,如果该数据页在内存中,则直接返回;否则,从磁盘中读取并加载到内存中。
2、更新数据:
执行器将数据值加1,得到新的数据行,并再次调用引擎接口写入新数据。
3、记录Redo Log:
引擎将新数据更新到内存中,并将这个更新操作记录到Redo Log中,此时Redo Log处于Prepare状态。
4、生成Binlog:
执行器生成这个操作的Binlog,并将其写入磁盘。
5、提交事务:
执行器调用引擎的提交事务接口,引擎将Redo Log改为提交(Commit)状态,完成更新。
日志管理
1、Redo Log:
Redo Log是InnoDB引擎特有的物理日志,用于恢复提交后的物理数据页,它采用预写式日志(WAL)技术,先写日志再写磁盘,以提高更新效率。
Redo Log的大小是固定的,当写满时,需要先擦掉一些记录,将Checkpoint向前推进。
2、Binlog:
Binlog是MySQL Server层实现的逻辑日志,记录了所有更新语句的原始逻辑,它主要用于数据恢复、主从复制和审计操作。
Binlog文件大小有上限,达到后会写入新的文件。
两阶段提交
1、一阶段(Prepare):
开启事务,Redo Log和Undo Log已经记录了对应的日志,事务状态为Prepare。
2、二阶段(Commit):
Binlog完成Write和Fsync后,事务一定提交;否则,事务回滚,发送Commit,清除Undo信息,刷Redo Log,设置事务状态为Completed。
相关问答FAQs
1、为什么MySQL使用Redo Log和Binlog两种日志?
MySQL使用Redo Log来确保数据的持久性和崩溃恢复能力,而Binlog用于数据恢复、主从复制和审计操作,这两种日志各有其独特的作用和优势,共同保证了MySQL的数据一致性和可靠性。
2、如何查看MySQL的Binlog?
可以通过官方提供的mysqlbinlog工具来查看Binlog文件的内容,使用SHOW BINARY LOGS命令确认Binlog的位置,然后使用mysqlbinlog工具解析Binlog文件,注意,Binlog不能直接查看,需要借助工具进行解析。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1080688.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复