本文目录一览:
- 1、说明在java程序中连接并查询Mysql的主要命令和步骤
- 2、MySQL与Redis数据库连接池介绍(图示+源码+代码演示)
- 3、简述mysql建立连接过程
- 4、Mysql连接join查询原理知识点
- 5、简介mysql之mysql语句执行流程
说明在java程序中连接并查询Mysql的主要命令和步骤
java程序连接MySql的主流方法是通过JDBC,你需要去MySql官网下一个他们的驱动包,然后以外部包的形式导入到项目中
建立连接
进行查询
Class.forName("com.mysql.jdbc.Driver");
//DatabaseName是数据库名
Connection ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName",username,password);
//此时就可以使用这个连接进行增删改查了
我这里贴上我以前写的一个demo的部分查询代码
PreparedStatment ps=ct.prepareStatement("select * from students where Number=?");//sql语句结尾不需要;
//?可以为任何类型 在函数中声明 类似ps.set类型(第几个,数据);
//sql语句可以为任何种类,第一个是从1开始
ps.setInt(1,2);
ResultSet rs=ps.executeQuery();
while(rs.next()){
int Number=rs.getInt(1);//第一个字段,顺序与sql语句查询的顺序对应,若为*则按照表中字段顺序获取
Time Time=rs.getTime(3);
String Name=rs.getString(2);
String Sex=rs.getString(4);
System.out.println("编号:"+Number+",姓名:"+Name+",出生时间:"+Time+",性别:"+Sex);
}
项目最后需要关闭连接
ct.close();
MySQL与Redis数据库连接池介绍(图示+源码+代码演示)
数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
简单的说:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。
不使用数据库连接池
如果不使用数据库连接池,对于每一次SQL操作,都要走一遍下面完整的流程:
1.TCP建立连接的三次握手(客户端与 MySQL服务器的连接基于TCP协议)
2.MySQL认证的三次我收
3.真正的SQL执行
4.MySQL的关闭
5.TCP的四次握手关闭
可以看出来,为了执行一条SQL,需要进行大量的初始化与关闭操作
使用数据库连接池
如果使用数据库连接池,那么会 事先申请(初始化)好 相关的数据库连接,然后在之后的SQL操作中会复用这些数据库连接,操作结束之后数据库也不会断开连接,而是将数据库对象放回到数据库连接池中
资源重用:由于数据库连接得到重用,避免了频繁的创建、释放连接引起的性能开销,在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。
更快的系统响应速度:数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。 此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了从数据库连接初始化和释放过程的开销,从而缩减了系统整体响应时间。
统一的连接管理,避免数据库连接泄露:在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄露。
如果说你的服务器CPU是4核i7的,连接池大小应该为((4*2)+1)=9
相关视频推荐
90分钟搞懂数据库连接池技术|linux后台开发
《tcp/ip详解卷一》: 150行代码拉开协议栈实现的篇章
学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
需要C/C++ Linux服务器架构师学习资料加qun 812855908 获取(资料包括 C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg 等),免费分享
源码下载
下载方式:(Github中下载)
db_pool目录下有两个目录,mysql_pool目录为MySQL连接池代码,redis_pool为redis连接池代码
下面介绍mysql_pool
CDBConn解析
概念: 代表一个数据连接对象实例
相关成员:
m_pDBPool:该数据库连接对象所属的数据库连接池
构造函数: 绑定自己所属于哪个数据库连接池
Init()函数: 创建数据库连接句柄
CDBPool解析
概念:代表一个数据库连接池
相关成员:
Init()函数:常见指定数量的数据库实例句柄,然后添加到m_free_list中,供后面使用
GetDBConn()函数: 用于从空闲队列中返回可以使用的数据库连接句柄
RelDBConn()函数: 程序使用完该数据库句柄之后,将句柄放回到空闲队列中
测试之前,将代码中的数据库地址、端口、账号密码等改为自己的(代码中有好几处)
进入MySQL, 创建mysql_pool_test数据库
进入到mysql_pool目录下, 创建一个build目录并进入 :
然后输入如下的命令进行编译
之后就会在目录下生成如下的可执行文件
输入如下两条命令进行测试: 可以看到不使用数据库连接池,整个操作耗时4秒左右;使用连接池之后,整个操作耗时2秒左右,提升了一倍
源码下载
下面介绍redis_pool
测试
进入到redis_pool目录下, 创建一个build目录并进入 :
然后输入如下的命令进行编译
之后就会在目录下生成如下的可执行文件
输入如下的命令进行测试: 可以看到不使用数据库连接池,整个操作耗时182ms;使用连接池之后,整个操作耗时21ms,提升了很多
进入redis,可以看到我们新建的key:
简述mysql建立连接过程
在以前不论是使用SQLyog MySQL GUI或是phpMyAdmin访问数据库,第一步一定是输入访问数据库的账号与密码,当然Dreamweaver也不例外。在Dreamweaver中,我们通过建立 【MySQL联机】告诉Dreamweaver连接的MySQL数据库地址、名称,以及访问的账号和密码。
在一个网站中,我们只需对一个数据库建立一次MySQL连接。通常网络上的主机空间也只支持访问一个数据库。例如虚拟主机,最基本的方案是搭配1个MySQL数据库。
在【文件】面板中打开index.php,接着选择【应用程序】→【数据库】面板,单击【+】按钮后选择【MySQL连接】。
建立MYSQL连接
在建立数据库连接前,我们必须设置好图6-5中的前面3个选项,如果依照书中叙述设置好,那么基本上便不会有问题。当然必须至少打开一个网页,否则会有无法选择的情况发生。
未打开页面,选项均无法选择
弹出如图6-7所示的窗口,请依照其下面的说明进行设置。可以单击【测试】按钮测试是否有问题,单击【确定】按钮后就可以在【应用程序】→【数据库】面板中看到所建立的数据库连接。我们可以操作这个树状结构(见图6-8)检查连接的数据库、数据表与字段名称及属性等。也可以打开phpMyAdmin来检查数据库结构,并与面板内的信息对比。字段与功能说明。
建立连接
数据库内的数据表、字段和属性
字段与功能说明
字 段
说 明
连接名称
依个人喜好自由输入
MySQL服务器
MySQL服务器的位置,一般设置为localhost,除非所要存取的MySQL数据库不在网页所在的主机上,而且该MySQL数据库也提供对外的连接
用户名
访问MySQL数据库的用户名称
密码
访问MySQL数据库的用户密码
数据库
选择所要建立连接的数据库名称,可以单击【选取】按钮浏览MySQL服务器上的所有数据库。我们选择刚导入的范例数据库database
在建立完成MySQL连接后,在【文件】面板中会看到Dreamwaver自动建立了Connections文件夹,在该文件夹下有一个与前面所建立的MySQL连接名称相同的文件。
Connections文件夹
Connections文件夹是Dreamweaver用来存放MySQL连接设置文件的文件夹。
打开该文件并使用【代码】视图,可以看到有关连接数据库的设置。
数据库连接设置
在这个文件中定义了与MySQL服务器的连接(mysql_pconnect函数),包括以下内容。
$hostname:MySQL服务器的地址。
$database:连接数据库的名称。
$username:用户名称。
$password:用户密码。
定义的值与我们前面在图形界面所设置的值是对应的,然后利用函数mysql_pconnect与数据库连接。连接后才能对数据库进行查询、新增、修改或删除的操作。
如果在网站制作完成后将文件上传至网络上的主机空间时发现,网络上的MySQL服务器访问的用户名、密码等方面与本机设置有所不同,可以直接修改位于Connection文件夹下的db_conn.php文件。但还是建议直接在本机配合网络主机上的环境来设置。例如,你拥有虚拟主机所提供的MySQL数据库名称为xu354jp6,但在本机却要命名为Charles,虽然可能会好看些,但到时候就会多一个麻烦了。
对于如何将本机已经完成的网站移植到网络上的空间,将在附录中有详细的介绍。
总之,在建立好数据库连接后,除非要连接MySQL数据库里的另一个数据库,否则不需要再做这个步骤了。
Mysql连接join查询原理知识点
Mysql连接(join)查询
1、基本概念
将两个表的每一行,以“两两横向对接”的方式,所得到的所有行的结果。
假设:
表A有n1行,m1列;
表B有n2行,m2列;
则表A和表B“对接”之后,就会有:
n1*n2行;
m1+m2列。
2、则他们对接(连接)之后的结果类似这样:
3、连接查询基本形式: from
表1
【连接方式】
join
表2
【on连接条件】连接查询基本形式: from
表1
【连接方式】
join
表2
【on连接条件】
1、连接查询的分类
交叉连接
其实就是两个表之间按连接的基本概念,进行连接之后所得到的“所有数据”,而对此无任何“筛选”的结果——筛选就是指连接条件。
即:交叉连接就是没有条件的“全部连接”——有称为 笛卡尔积。
交叉连接通常没有实用价值,因为这样连接之后 数据,每一行数据的意义就可能会“丢失”。
形式:
from
表1
【cross】
join
表2
;
或:
from
表1
,
表2
;
内连接
形式:
from
表1
【inner】
join
表2
on
表1.字段1
=
表2.字段2;
含义:
取得一个“交叉连接”的结果中,满足所设定的连接条件(就是on后面的条件)的那些行的数据;
交叉连接往往会有“无意义数据”,如下:
2、看内连接的结果:
3、结果为:
4、可见:内连接其实就是找出一个交叉连接的数据结果中,“有意义”的那些数据行。而一个交叉连接,其中的数据,有的有意义,有的没有意义(错误数据)。
但是,要注意:
1,这种连接条件,不是随意设置,而是要根据表之间的实际关系来设置,通常该关系就是两个表之间的具有“主外键关系”的两个字段的值相等。
2,可见,连接查询,跟我们之前所学的“外键关系”,是有其内在的逻辑一致性的。
3,不过,我们做内连接的时候,并不是要求2个表“必须”有外键关系——我们只是自己从现实角度理解他们有外键关系(数据关系)就可以,而在查询的时候使用内连接就建立起了他们的关系。可见:内连接其实就是找出一个交叉连接的数据结果中,“有意义”的那些数据行。而一个交叉连接,其中的数据,有的有意义,有的没有意义(错误数据)。
您可能感兴趣的文章:MySQL
left
join操作中on和where放置条件的区别介绍mysql使用from与join两表查询的区别总结mysql多个left
join连接查询用法分析MySQL优化之使用连接(join)代替子查询Mysql中的join操作
简介mysql之mysql语句执行流程
1.一条查询语句如何执行?
2.一条更新语句如何执行?
3.innodb的redolog是什么?
4.什么是写缓冲
5.写缓冲一定好吗?
6.什么情况会引发刷脏页
关于一条mysql查询语句在mysql中的执行流程
如select name from test where id=10;
1.连接器---先与mysql服务端连接器建立连接,若查询缓存命中则直接返回 (查询缓存的弊端:查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。)
2.分析器---词法分析告诉服务端你要干什么(我要找 test表中id为10的名字) ( 其中sql语法错误在这块暴露 )
3.优化器---服务端会思考该怎么执行最优(索引的选择)
4.执行器---检查用户对库对表的权限
5.存储引擎--存储数据,提供读写接口
以update a set name=1 where id=1;
主要区别在于在查询到数据之后(select name from a where id=1),如果是innodb引擎它会进行日志的两阶段提交:
1.开启事务,写入redolog(innodb引擎特有),并更新内存
3.写入binlog,提交事务,commit
我们知道mysql数据存储包含内存与磁盘两个部分,innodb是按数据页(通常为16k)从磁盘读取到内存中的(剩余操作在内存中执行),当要更新数据时,若目标数据的数据页刚好在内存中,则直接更新。不在呢?
将这个更新操作(也可能是插入) 缓存在change buffer中 (redolog也会记录这个change buffer操作)等到下一次查询要用到这些数据时,再执行这些操作,改变数据(称为合并操作记录称为merge)。
innodb_change_buffer_max_size
innodb_change_buffering
先介绍两个概念
因为redolog是环形日志,当redolog写满时,就需要“擦掉”开头的一部分数据来达到循环写,这里的擦掉指,指将redolog日志的checkpoint位置从 CP推进到CP‘ ,同时将两点之间的脏页刷到磁盘上(flush操作),此时系统要停止所有的更新操作(防止更新操作丢失)
1.系统内存不足。当要读取新的内存页时就要淘汰一些数据页,如果淘汰的正好是脏页,就要执行一次flush操作
2.Mysql认为系统处于“空闲状态”
3.正常关闭Mysql
上述后两者场景(系统空闲和正常关闭)对于性能都没太大影响。
当为第一种redolog写满时,系统无法执行更新操作,所有操作都会堵塞
当为第二种内存不够用时,如果淘汰脏页太多,影响mysql响应时间
后两者刷脏页会影响性能,所以Mysql需要有刷脏页控制策略,可以从以下几个设置项考虑
1.设置innodb_io_capacity告诉innodb所在主机的IO能力