我们平时建表的时候,一般会像下面这样。CREATETABLEuser(idintNOTNULLAUTOINCREMENTCOMMENT'主键',namechar(10)NOTNULLDEFAULT''COMMENT'名字',PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8mb4;出于习惯,我们一般会加一列id作为主键,而这个主键一般边上都有个AUTOINCREMENT,意思是这个主键是自增的。自增就是i++,也就是每次都加1。但问题来了。主键id不自增行不行?为什么要用自增id做主键?离谱点,没有主键可以吗?什...
2022-07-19 16:33:22 6996浏览 0点赞 0回复 0收藏
作者小白来源小白debug(ID:xiaobaidebug)兄弟们。浅浅的炫个富吧。说出来你们可能不信。手机你们有吗?我有。短信,知道吧?一条一毛钱,我天天发。你敢想吗?所以说,年轻人,有钱是真的好。今天,我们就以短信为话题聊起。短信,它又叫SMS。比如说,你有一张短信表(sms),里面放了各种需要发送的短信信息。sms建表sqlsms表需要注意的是state字段,为0的时候说明这时候短信还未发送。此时还会有一个异步线程不断的捞起未发...
2022-07-19 16:32:24 6074浏览 0点赞 0回复 0收藏
作者小白来源小白debug(ID:xiaobaidebug)那天,我还在外面吃成都六姐的冒菜。牛肉丸裹上麻酱后,狠狠嘬一口,都要入嘴了。产品经理突然发来消息。"线上有些用户不能注册了"心想着"关我x事,又不是我做的模块",放下手机。不对,那老哥上礼拜刚离职了,想到这里,夹住毛肚的手微微颤抖。对面继续发:"还有些用户不能改名""如果用上表情符号的话,问题必现"可以了,这下问题几乎直接定位了。危,速归。有经验的兄弟们很容易看...
2022-06-24 17:13:25 6183浏览 0点赞 0回复 0收藏
作者小白来源小白debug(ID:xiaobaidebug)今天这篇文章,其实也是我曾经面试中遇到过的真题。分库分表大家可能听得多了,但读扩散问题大家了解吗?这里涉及到几个问题。分库分表是什么?读扩散问题是什么?分库分表为什么会引发读扩散问题?怎么解决读扩散问题?这些问题还是比较有意思的。相信兄弟们也一定有机会遇到哈哈哈。我们先从分库分表的话题聊起吧。分库分表我们平时做项目开发。一开始,通常都先用一张数据表,而一...
2022-06-24 17:12:58 7067浏览 0点赞 0回复 0收藏
作者小白来源小白debug(ID:xiaobaidebug)刷网站的时候,我们经常会遇到需要分页查询的场景。比如下图红框里的翻页功能。我们很容易能联想到可以用mysql实现。假设我们的建表sql是这样的mysql建表sql建表sql大家也不用扣细节,只需要知道id是主键,并且在username建了个非主键索引就够了,其他都不重要。为了实现分页。很容易联想到下面这样的sql语句。selectfrompageorderbyidlimitoffset,size;比如一页有10条数据。user表数...
2022-05-11 17:34:20 1.4w浏览 0点赞 0回复 0收藏
假设当前数据库里有下面这张表。user表数据库原始状态老规矩,以下内容还是默认发生在innodb引擎的可重复读隔离级别下。都是select结果却不同大家可以看到,线程1,同样都是读age3的数据。第一次读到1条数据,这个是原始状态。这之后线程2将id2的age字段也改成了3。线程1此时再读两次,一次读到的结果还是原来的1条,另一次读的结果却是2条,区别在于加没加forupdate。为什么同样条件下,都是读,读出来的数据却不一样呢可重复...
2022-04-27 11:12:50 5838浏览 0点赞 0回复 0收藏
01、什么是框架众所周知,mybatis是一个ORM框架。那么什么是框架呢框架就是我们软件开发中的一套解决方案,不同的框架同来解决不同的问题1.1框架的作用框架内部封装很多的细节,使开发者可以使用极简的方式来完成自己的功能,大大的提高了开发效率02、什么是MyBatis那什么是mybatis呢?mybatis是一款优秀的ORM(持久层)框架,使用Java语言编写前身是apache的一个开源项目iBatis,2010年迁移到googlecode并正式改名为mybatisORM...
2022-04-16 18:48:34 7622浏览 0点赞 0回复 0收藏
阅读文章能够收获SqlSessionFactoryBuilder,SqlSessionFactory、SqlSession相关知识“建议结合mybatis源码[1]、mybatis官网[2]阅读,可以下载不同版本的源码,本文根据3.4.x解读,不同版本源码存在细微差别为防止不必要的麻烦,直接下载3.4.x版本的mybatis源码,文章中测试代码是在org.apache.ibatis.autoconstructor目录下建立新的文件夹进行测试01、相关概念简介1.1SqlSession负责执行select、insert、update、delete等命令,同时负...
2022-04-16 18:44:08 5989浏览 0点赞 0回复 0收藏
01、Configuration创建在之前解析SqlSessionFactory的时候,build()实现并没有详细解读,而今天源码解析的主人公Configuration就在此方法中被初始化这里以字节流的build()重载方法构建举例publicSqlSessionFactorybuild(InputStreaminputStream,Stringenvironment,Propertiesproperties){try{构建xml文件解析器XMLConfigBuilderXMLConfigBuilderparsernewXMLConfigBuilder(inputStream,environment,properties);parse()为具体解析...
2022-04-16 18:36:24 4429浏览 0点赞 0回复 0收藏
01、前言为什么会写这篇文章,因为在看到MapperAnnotationBuilder构造方法初始化时,发现了四个从未见过的注解publicMapperAnnotationBuilder(Configurationconfiguration,Class<>type){...sqlAnnotationTypes.add(Select.class);sqlAnnotationTypes.add(Insert.class);sqlAnnotationTypes.add(Update.class);sqlAnnotationTypes.add(Delete.class);这四个注解眼生的很sqlProviderAnnotationTypes.add(SelectProvider.class);sqlP...
2022-04-16 18:26:34 7381浏览 0点赞 0回复 0收藏
01、前言在正式介绍mapper接口注册源码分析之前,首先来介绍什么是mapper,再其次说明下mapper与sql关联的两种方式可能比较多的同学使用的是xml的方式,没有接触过注解定义;注解定义SQL语句本质上是一种轻量级的配置02、mapper接口2.1什么是mapper接口mapper接口是用于执行自定义SQL语句相关的方法可以在mapper接口定义方法上添加SQL方法注解或者使mapper接口绑定xml文件2.2使用注解定义sqlpublicinterfaceAutoConstructorMapper{S...
2022-04-16 18:21:37 5617浏览 0点赞 0回复 0收藏
01、Executor一个SqlSession对应一个Executor对象,这个对象负责增删改查的具体操作1.1组件类图如图所示,Exeutor是一个顶层的接口,有两个实现类,分别是BaseExecutor、CachingExecutor1.2BaseExeutor抽象类,采用了模版设计模式,实现了Exeutor接口,针对接口提供了默认实现,并提供了额外的抽象方法,由不同的实现类来负责实现不同的功能抽象类下有三(其实是四个)个不同功能的实现类:SimpleExecutor、ReuseExecutor、BatchExecutor...
2022-04-16 18:14:14 6080浏览 0点赞 0回复 0收藏
前言ORM持久层指的是:将业务数据存储到磁盘,也具备长期存储能力,只要磁盘不损坏,如果在断电情况下,重启系统仍然可以读取数据01、JDBC1.1什么是jdbcJDBC(JavaDataBaseConnectivity)就是Java数据库连接,说的直白点就是使用Java语言操作数据库本来我们是通过控制台或客户端操作的数据库,JDBC是用Java语言来发送SQL语句1.2Jdbc原理最初SUN公司希望提供一套能够适用所有数据库的API,但是在实际操作中却发现这是项基本不可能完...
2022-04-16 18:06:24 6026浏览 0点赞 0回复 0收藏
“本次分享内容依据Mybatis33.4.x源码1、带着问题思考本次分享Mybatis与JDBC的关系.xml文件定义SQL语句如何解析Mybatis中Mapper接口的存储与实现MybatisSQL的执行过程Mybatis中分页如何实现2、持久层的那些事2.1JDBC什么是JDBCJDBC(JavaDataBaseConnectivity)就是Java数据库连接,说的直白点就是使用Java语言操作数据库本来我们是通过控制台或客户端操作的数据库,JDBC是用Java语言来发送SQL语句JDBC原理最初SUN公司希望提供一套...
2022-04-16 17:59:13 6933浏览 0点赞 0回复 0收藏
前言分布式锁相信大家一定不会陌生,想要用好或者自己写个分布式锁却没那么简单想要达到上述的条件,一定要掌握分布式锁的应用场景,以及分布式锁的不同实现,不同实现之间有什么区别分布式锁场景如果想真正了解分布式锁,需要结合一定场景;举个例子,某夕夕上抢购AirPodsPro的100元优惠券如果使用下面这段代码当作抢购优惠券的后台程序,我们一起看一下,可能存在什么样的问题很明显的就是这段流程在并发场景下并不安全,会导致优惠券发...
2022-04-16 17:19:45 8593浏览 0点赞 0回复 0收藏
前言假如有人问你这么几个问题,看能不能答上来MybatisMapper接口没有实现类,怎么实现的动态代理JDK动态代理为什么不能对类进行代理(充话费送的问题)抽象类可不可以进行JDK动态代理(附加问题)答不上来的铁汁,证明Proxy、Mybatis源码还没看到位。不过没有关系,继续往下看就明白了动态代理实战众所周知哈,Mybatis底层封装使用的JDK动态代理。说Mybatis动态代理之前,先来看一下平常我们写的动态代理Demo,抛砖引玉一般来说定...
2022-04-16 17:08:04 7920浏览 0点赞 0回复 0收藏
在我们的印象中,mysql数据表里无非就是存储一行行的数据。跟个excel似的。直接遍历这一行行数据,性能就是O(n),比较慢。为了加速查询,使用了B+树来做索引,将查询性能优化到了O(lg(n))。但问题就来了,查询数据性能在lg(n)级别的数据结构有很多,比如redis的zset里用到的跳表,也是lg(n),并且实现还贼简单。那为什么mysql的索引,不使用跳表呢我们今天就来聊聊这个话题。B+树的结构之前的一篇文章里,已经提到过B+树的结构...
2022-04-16 14:40:20 7461浏览 0点赞 0回复 0收藏
故事从好多年前说起。想必大家也听说过数据库单表建议最大2kw条数据这个说法。如果超过了,性能就会下降得比较厉害。巧了。我也听说过。但我不接受它的建议,硬是单表装了1亿条数据。这时候,我们组里新来的实习生看到了之后,天真无邪的问我:"单表不是建议最大两千万吗为什么这个表都放了1个亿还不分库分表"我能说我是因为懒吗我当初设计时哪里想到这表竟然能涨这么快。。。我不能。说了等于承认自己是开发组里的毒瘤,虽然我...
2022-04-16 13:52:16 9531浏览 0点赞 0回复 0收藏
我熟练应用ctrlc和ctrlv开发curd代码好多年了。mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢有哪些操作,可以提升mysql的查询能力呢今天这篇文章,我们就来聊聊会导致数据库查询变慢的场景有哪些,并给出原因和解决方案。数据库查询流程我们先来看下,一条查询语句下来,会经历哪些流程...
2022-04-15 23:15:57 8545浏览 0点赞 0回复 0收藏
哟,又是我小白。最近有点高产了。连我自己都害怕了。直接进入正题吧。两个事务并发写,能保证数据唯一吗我先来解释下标题讲的是个啥。我们假设有这么一个用户注册的场景。用户并发请求注册新用户。你有一张数据库表,也就是下面的user表。user表数据库原始状态产品经理要求用户和用户之间,电话号码不能重复,为了保证这一点。我们想到了先查一下数据库,再判断一下,如果存在,就退出,否则插入一条数据。类似下面这样的伪代...
2022-04-15 23:02:19 1.3w浏览 0点赞 0回复 0收藏