数据库Mysql
文章平均质量分 75
mysql
轻舟未过万重山ing
日拱一卒,功不唐捐。日常分享技术记录,点点关注不迷路。
展开
-
InnoDB存储引擎非常重要的一个机制--MVCC(多版本并发控制)
隔离性是指一个事务内部的操作以及操作的数据对正在进行的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。隔离性可以防止多个事务并发执行时,可能存在交叉执行导致数据的不一致。MySQL 对隔离性的保证主要有两个方面:--用锁机制来保证一个事务写操作对另一个事务写操作的隔离性,---用 MVCC 机制来保证一个事务写操作对另一个事务读操作的隔离性。MySQL 中按照锁的粒度,可以分为全局锁,表锁和行锁。全局锁会使整个数据库处于只读状态,在做全库逻辑备份时经常用到。表级锁在操作数据时会锁定整张表,并发性能一般原创 2024-06-05 16:48:12 · 942 阅读 · 0 评论 -
MySQL是怎么保证原子性的(undo log日志相关)
可以认为当delete一条记录时,undo log中会记录一条 对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的uodate记录。当执行rollback回滚时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。平常我们在对数据进行增删改时,InnoDB 除了会记录 redo log,还会将更新的数据记录写进 undo log 中。当事务出现异常,执行失败的时候,就需要利用 undo log 中的信息将数据回滚到修改之前的版本。原创 2024-06-05 16:16:10 · 337 阅读 · 1 评论 -
MySQL是怎么保证持久性的(redo log日志相关)
答: 直接将脏页刷新回磁盘,存在严重的性能问题。因为很多DML语句操作数据页的时候,都是随机的。直接操作磁盘,这属于大量的随机磁盘IO。而commit的时候都是先将redo log日志文件刷新到磁盘中,是因为它是日志文件,日志文件都是追加的形式。这是一种顺序的磁盘IO。效率更高!原创 2024-06-05 16:05:09 · 1216 阅读 · 0 评论 -
MySQL的一些高频面试题汇总(持续补充)
对于「读提交」和「可重复读」隔离级别的事务来说,它们是通过MVCC中的Read View 来实现的,它们的区别在于创建 Read View 的时机不同,大家可以把 Read View 理解成一个数据快照,就像相机拍照那样,定格某一时刻的风景。针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。原创 2024-05-31 19:46:21 · 846 阅读 · 0 评论 -
数据库MySQL中当前读和快照读区别
比如: 之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于MVCC,它在很多情况下, 避免了加锁操作,降低了开销。快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读。当前读读取的是记录的最新版本(最新数据,而不是历史版本的数据),读取时还要保证其他并发事务 不能修改当前记录,会对读取的记录进行加锁。Read Committed隔离级别下:快照读和当前读读取的数据是一样的,都是最新的。当前读:每次读取的都是当前最新的数据,但是读的时候不允许写,写的时候也不允许读。原创 2024-04-22 20:43:59 · 760 阅读 · 0 评论 -
Windows11安装MySql-8.0.36安装详细教程(保姆级教程)
Windows11安装MySql-8.0.36安装详细教程(保姆级教程)原创 2024-04-03 16:34:43 · 5439 阅读 · 4 评论 -
MySQL解答ERROR 1366 (HY000): Incorrect string value: ‘\xD5\xC5\xC8\xFD‘ for column-解决方案
到这一步相信大部分人的问题就已经解决了,但是有少部分人(比如我)还是无法解决这个问题,那么此时我们还需要去检查表的字符集和表里面的字段的字符集,输入。格式不兼容,不支持插入中文数据,因此我们在用python向数据库进行中文数据插入时,要注意:连接数据库和数据库的编码格式是否都为utf-8。注意看,此时dept中DNAME和LOC的字段字符集也不是utf8,所以还是无法正常插入中文。可以看到我的数据库中database的字符集并不是utf8,输入。可以看到表格的字符集并不是utf8,此时输入。原创 2024-02-27 15:45:36 · 643 阅读 · 0 评论 -
MySQL:错误ERROR 1045 (28000)详解
或者:错误:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO)错误:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)3、通过命令行win+R进入MySQL的BIN目录,输入“mysql -u root -p”(不输入密码),按下两个回车即可进入数据库(最好用管理员运行终端)。原创 2024-02-27 15:04:42 · 2809 阅读 · 0 评论