目前行业里的大部分的开发人员,对MySQL的了解和掌握程度,大致停留在这样一个阶段,MySQL可以建库建表,可以建索引,可以增删改查。
所以很多伙伴眼里的数据库是这个样子的:
但实际在使用MySQL数据库的过程中,难免会遇到各种各样的问题,比如,SQL性能低,死锁。
然后解决这些问题的方式,就是上网搜索,按照别人的方法尝试着解决一下,可能最后解决了问题,但自己也没搞清为什么,只知道这样做就行了。
本文先给大家介绍下,我们平时开发的系统是如何与MySQL打交道的。
早些年我们去访问一个MySQL数据库,都需要一个MySQL驱动,然后通过jdbc的方式与数据库建立连接,然后执行各种SQL。
就像这样,现在maven里加入MySQL驱动,mysql-connector-java就是Java语言的MySQL驱动。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
要访问数据库,MySQL驱动会先和数据库建立一个连接,就像这样;
与数据库建立连接后,系统才可以执行各种各样的SQL语句。
然而我们开发的系统,可能会与数据库建立很多的连接,不可能每次要执行SQL语句的时候都先建立一个连接吧,所以此时连接池就呼之欲出了。
比如,目前最常用的连接池是阿里的druid。
一个数据库可能会与很多系统建立很多连接,那么MySQL本身也必然要维护很多与系统之间的连接,所以MySQL内部也有一个连接池。于是我们开发的系统与MySQL交互就变成下图这样了:
MySQL中的连接池维护了与系统之间的多个数据库连接,而且你的系统与MySQL建立连接的时候,还会根据你传来的账号密码,进行验证。