数据库
文章平均质量分 89
盈梓的博客
2020毕业于浙江大学计算机科学与技术系,目前就职于电信公司,负责带领一个小团队进行系统开发,对软件开发具有浓厚的兴趣,工作之余喜欢钻研技术,关注IT技术的发展趋势,发布一些小的毕业设计项目,感谢大家的关注与支持。
展开
-
秒杀库存解决方案
电商系统中秒杀是一种常见的业务场景需求,其中核心设计之一就是如何扣减库存。本篇主要分享一些常见库存扣减技术方案,库存扣减设计选择并非一味追求性能更佳,更多的应该考虑根据实际情况来进行架构取舍。由于涉及到 SELECT后进行UPDATE,以上步骤中存在多事务并发时写覆盖的问题。原创 2023-08-14 19:48:11 · 415 阅读 · 0 评论 -
为啥预编译SQL能够防止SQL注入
回顾一下全文,当我们说“预编译”的时候,其实这个功能来自于数据库的支持,它的原理是先编译带有占位符的 SQL 模板,然后在传入参数让数据库自动替换 SQL 中占位符并执行,在这个过程中,由于预编译好的 SQL 模板本身语法已经定死,因此后续所有参数都会被视为不可执行的非 SQL 片段被转义,因此能够防止 SQL 注入。作为条件的字段有哪些?在默认情况下是假的“预编译”,它只不过在设置参数的时候帮我们对参数做了一下转义,但是最后发送到数据库的依然是普通的 SQL,而不是按预编译 SQL 的方式去执行。原创 2023-03-04 16:02:17 · 1361 阅读 · 0 评论 -
MySQL 中的锁有哪些类型,MySQL 中加锁的原则
因为两个 session 是同时插入数据的,binlog 对表 t2 的更新日志只会有两种情况,先记录 session A 的或者先记录 session B 的,同时 binlog 在从库中的数据执行,也都是顺序性的,生成的id都是连续的,不会出现主库中,两个 session 并行间隙插入的情况,这样就会出现从库和主库数据不一致的情况。根据上面的加锁原则,首先加锁的基本单位是 next-key lock,索引中的等值查询,如果加锁的对象是唯一索引,这时候锁就从 next-key lock,变成行锁了。原创 2023-03-02 17:17:10 · 2786 阅读 · 1 评论 -
MySQL 如何实现数据插入
insert into 表名(字段1, 字段2,...,字段n) values (值a1, 值a2,...,值an),(值b1, 值b2,...,值bn)insert ignore into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n)insert into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n)insert into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n)原创 2023-02-07 18:21:01 · 2362 阅读 · 0 评论 -
如何实现百万级数据excel导出功能
但它们都存在一个严重的问题就是:非常耗内存,POI有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。这样导出数据的功能,在第一个job周期内执行不完,在第二次job执行时,查询待处理状态,并不会查询出执行中状态的数据,也就是说不会重复执行。其实,在用户的操作界面,增加更多的查询条件,用户通过修改查询条件,多次导数据,可以实现将所有数据都导出的功能,这样可能更合理一些。原创 2023-02-05 10:07:29 · 1875 阅读 · 2 评论 -
SQLSERVER 的四个事务隔离级别到底怎么理解?
提交读 是目前 SQLSERVER 默认的隔离级别,它是以不会出现 脏读 为唯一目标,何为脏读,简而言之就是读取到了别的事务未提交的修改数据,这个数据有可能会被其他事务在后续回滚掉,如果真的被其他事务 回滚 了,那你读到了这样的数据就是 错误 的数据,可能会给你的系统带来非常隐蔽的 bug,为了说明这个现象,我们用两个会话来测试一下帮助大家理解。什么叫 可重复读 呢?为了实现脏读这里加了 nolock 关键词,从图中明显的看到,获取的 zzzzz 数据是错误的,在一些和钱打交道的系统中是被严厉禁止的。转载 2023-02-04 16:09:39 · 166 阅读 · 1 评论 -
MySQL8.0性能优化(实践)
(排序列重复数据呢?当查询它的下页时,拿它的最后一条数据的重要栏位作为追加的查询条件,如何呢...?通过非聚集索引检索记录的时候,需要2次操作,先在非聚集索引中检索出主键,然后再到聚集索引中检索出主键对应的记录,这个过程叫做回表,比聚集索引多了一次操作。where全部为and时,无所谓位置,都会命中索引(当多个条件中有索引的时候,并且关系是and的时候,会自动匹配索引区分度高的)查询涉及到的列都为组合索引列时,包括:select、where、order、group等,索引覆盖(索引下推),避免回表查询。原创 2023-02-01 09:58:54 · 1226 阅读 · 0 评论 -
算法竞赛向 C++ Standard Library 使用速查
erase(iter) :删除迭代器指向的元素,(C++11) 返回指向被删除元素的后一个元素的迭代器。erase(first, last):左闭右开区间删除,(C++11) 返回指向被删除元素的后一个元素的迭代器。find(str) / rfind(str) / find_first_of(c) / find_first_not_of(c) / find_last_of(c) / find_last_not_of(c):找字符串或字符,返回位置。insert(x) :插入元素 x。转载 2023-01-30 09:46:48 · 145 阅读 · 1 评论 -
SQLSERVER 事务日志的 LSN 到底是什么?
大家都知道数据库应用程序 它天生需要围绕着数据文件打转,诸如包含数据的 .mdf,事务日志的 .ldf,很多时候深入了解这两类文件的合成原理,差不多对数据库就能理解一半了,关于 .mdf 的合成前面的文章已经有所介绍,这篇我们来聊一下 .ldf 的一些内部知识,比如 LSN。通过上面的图很容易就能明白其中的逻辑关系,事务日志文件被划分成了多个 虚拟文件,虚拟文件又划分成了多个 日志段,日志段又划分成了多个 扇区,日志段中日志记录位置存储在 槽号 中,有了这些理论基础,接下来用一个案例来加深大家的理解吧。转载 2023-01-29 14:32:22 · 221 阅读 · 1 评论