
数据库
文章平均质量分 78
liulanba
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
InnoDB的redo log和 undo log
文章摘要: Redo Log(重做日志)和Undo Log(回滚日志)是InnoDB的核心机制,分别保障事务的持久性和原子性。 Redo Log 采用物理逻辑日志记录数据页修改,通过WAL(Write-Ahead Logging)机制确保事务提交后修改不丢失,结合日志缓冲区、检查点(Checkpoint)和LSN(日志序列号)实现高效崩溃恢复,并利用组提交优化高并发写入性能。 Undo Log 记录逻辑逆操作(如INSERT对应DELETE),支持事务回滚和MVCC,通过独立表空间存储提高管理效率。两者协同原创 2025-07-23 22:45:56 · 874 阅读 · 0 评论 -
事务的特性 - ACID
ACID是数据库事务的四大特性,包括原子性(事务要么全成功要么全失败)、一致性(事务前后数据满足完整性约束)、隔离性(并发事务互不干扰)和持久性(提交后修改永久生效)。数据库通过日志(如WAL)、锁机制(如两阶段锁)和多版本并发控制(MVCC)等技术实现这些特性。以银行转账为例,ACID确保了转账操作的可靠性,如原子性防止部分成功,一致性保证总额不变,隔离性避免并发干扰,持久性确保数据永久保存。这些机制共同保障了数据库的可靠性和数据一致性。原创 2025-07-23 22:45:23 · 727 阅读 · 1 评论 -
分布式事务中的2PC和 3PC
摘要: 2PC和3PC是分布式事务中确保原子性的核心协议。2PC通过准备和提交两阶段协调参与者,但存在阻塞和协调者单点故障问题。3PC引入预提交阶段和超时机制,降低阻塞风险,但实现更复杂且无法彻底解决不一致问题。两者均依赖协调者,适用于不同场景:2PC简单高效但容错差,3PC通过额外开销提升可用性,但网络分区下仍可能不一致。实际应用中需权衡一致性与性能需求。原创 2025-07-23 22:22:47 · 600 阅读 · 0 评论 -
mysql的information_schema浅析
information_schema 是 MySQL 中的一个虚拟数据库,它包含了关于 MySQL 服务器的所有元数据。原创 2024-06-24 23:09:23 · 1121 阅读 · 0 评论 -
mysql的主从同步
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。原创 2024-06-13 13:06:15 · 1834 阅读 · 0 评论 -
数据库的连接池详解
数据库连接池是一种管理和维护数据库连接的机制,用于提高数据库访问的性能和效率。连接池通过在应用程序启动时创建一组数据库连接,并在需要时将这些连接分配给应用程序,然后在不再需要时将其返回到池中。这可以减少创建和销毁数据库连接的开销,并优化数据库资源的使用。连接的创建和销毁开销:创建和销毁数据库连接是一项开销较大的操作。连接池通过预先创建一组连接,避免了每次请求都创建新连接的开销。这些连接在应用程序启动时初始化,并一直保持活动状态,直到应用程序关闭。原创 2023-12-26 23:33:34 · 3031 阅读 · 0 评论 -
mysql索引失效
在MySQL中,索引失效指的是查询语句无法有效地使用索引,而必须进行全表扫描。索引失效可能会导致查询性能下降,特别是在处理大量数据时。原创 2024-03-20 12:46:45 · 1891 阅读 · 0 评论 -
mysql的外键
外键定义了一个表中的列(或多列)与另一个表中的数据的关系,通常是通过主键和外键之间的关联。在上面的例子中,on_delete=models.CASCADE 表示当与之关联的 Author 对象被删除时,相关的 Book 对象也会被删除。on_delete 参数: 外键字段还有一个必需的参数 on_delete,它指定了在关联的对象被删除时采取的行为。主键和外键: 主表中的列通常是主键,而从表中的列则是外键,它与主表的主键相对应。主表和从表: 在两个表中,包含外键的表被称为主表,被引用的表是从表。原创 2023-11-29 11:23:44 · 837 阅读 · 0 评论 -
数据库的级联删除
例如,如果有三个模型 A、B、C,A 与 B 有外键关系,B 与 C 有外键关系,如果删除 A,则 B 和 C 中相关的对象也会被删除。如果删除与 OtherModel 关联的 MyUser 对象,OtherModel 中的 user 外键将被设置为指定的值。在这个例子中,如果删除与 OtherModel 关联的 MyUser 对象,相关的 OtherModel 对象也将被删除。这是级联删除的默认选项。删除 A 对象时,与 A 关联的 B 对象也将被删除,进而与 B 关联的 C 对象也会被删除。原创 2023-11-22 23:01:44 · 2144 阅读 · 0 评论 -
分布式锁/乐观锁/悲观锁/死锁
分布式锁是一种用于在分布式系统中实现并发控制的机制。在分布式环境中,多个节点或进程同时访问共享资源时,需要确保数据的一致性和正确性。分布式锁提供了一种方法来协调并发访问,以避免数据竞争和冲突。目的:分布式锁的主要目的是确保在分布式系统中的多个节点之间对共享资源的访问是互斥的,即同一时间只有一个节点可以获取锁并执行关键代码段,其他节点需要等待锁的释放才能继续执行。实现方式:常见的分布式锁实现方式包括基于数据库、基于缓存、基于共享存储和基于协调服务等。具体选择取决于系统的需求、性能要求和可用的技术栈。原创 2023-09-19 13:24:22 · 2242 阅读 · 0 评论 -
SQL故障和排查解决浅析
慢SQL是指在数据库中执行的SQL查询或操作的执行时间超过了预期或可接受的时间。这可能是由多种原因引起的,包括查询优化不当、索引缺失、不合理的数据模型设计、高并发负载等。原创 2023-09-14 13:26:49 · 1989 阅读 · 0 评论 -
八股取士--mysql篇
每当行被更改时,时间戳字段将获取当前时间戳。列设置为AUTO INCREMENT时,如果在表中达到最大值,会发生什么情况?它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。怎样才能找出最后一次插入时分配了哪个自动增量?LAST_INSERT_ID将返回由Auto_increment分配的最后一个值,并且不需要指定表名称。CONCAT(A, B) – 连接两个字符串值以创建单个字符串输出。通常用于将两个或多个字段合并为一个字段。原创 2022-01-14 11:19:14 · 8000 阅读 · 0 评论 -
mysql语法大全
首先来一个全局总览,后面我会分别对每个命令进行说明:然后输入密码登录数据库否则,打开mysql command line并输入密码进入数据库。原创 2023-04-13 20:15:01 · 45773 阅读 · 4 评论 -
mysql 索引
虽然 UUID 是一种广泛使用的全局唯一标识符,但在 MySQL 中作为索引字段时,可能会因为其较大的存储空间和随机性带来显著的性能问题。特别是在使用CHAR(36)或类型存储 UUID 时,索引效率较低,插入操作频繁导致索引树的分裂,进而影响性能。建议在可能的情况下使用BINARY(16)类型存储 UUID,或者使用自增整数作为主键,优化性能。原创 2022-10-25 13:10:05 · 21023 阅读 · 0 评论 -
db_connection.execute(sql_str, *args)执行sql语句
在db_connection.execute(sql_str, *args)语句中,sql_str是SQL查询语句,*args是一个元组,包含查询语句中占位符需要的参数。在主程序中,调用函数func并传入两个参数,第一个参数是SQL语句字符串sql_str,表示从表volumes中查询update_at字段小于2022的所有数据。因此,execute方法将接收元组中的值,并使用它们来替换查询语句中的占位符。在这段代码中,*args是将参数以元组的形式进行传递,*是用于对元组或列表进行解包的操作符。原创 2023-03-20 20:30:18 · 4167 阅读 · 0 评论 -
MySQL 的 LIKE 语句
需要注意的是,使用 LIKE 进行模糊查询可能会影响查询效率,尤其是在对大量数据进行查询时。MySQL 的 LIKE 语句用于在 WHERE 子句中模糊匹配数据,常用于模糊查询。其中 columnN 是需要进行模糊匹配的列名,pattern 是用于匹配的模式字符串。-用于表示一个范围,例如[a-z]表示从a到z的所有字母。a’ 两位且结尾字母是a的。‘%a’ 以a结尾的数据。‘a%’ 以a开头的数据。’ 两位且开头字母是a的。‘%a%’ 含有a的数据。原创 2023-03-20 11:30:08 · 9481 阅读 · 0 评论 -
mysql的distinct和group by的区别
需要注意的是,GROUP BY 和 DISTINCT 都会对查询的性能产生一定的影响。因此,在使用 GROUP BY 时需要谨慎,尽可能选择合适的索引和优化查询语句,以减少查询的时间和资源消耗。总的来说,GROUP BY 用于对数据进行分组和聚合操作,DISTINCT 则用于选择唯一的值。结果会按照商品类别分组,并且对于每个类别,会返回该类别下的任意一条记录中的供应商信息。此外,GROUP BY 通常会产生比 DISTINCT 更多的结果,因为它按照指定的列进行分组,而每个分组内可能包含多个不同的值。原创 2023-03-09 21:01:36 · 5579 阅读 · 0 评论 -
sqlchemy filter和filter_by
3、在使用多条件匹配的时候,filter需要借助sqlalchemy里的and_或者连续调用filter来实现, 而filter_by不需要,直接把多个匹配条件写在一起。1、filter引用列名时,使用“类名.属性名”的方式,比较使用两个等号“==”2、filter_by引用列名时,使用“属性名”,比较使用一个等号“=”4、在使用多条件匹配时,用到>=、>、原创 2022-10-25 13:11:58 · 3476 阅读 · 0 评论