mysql数据库名中的等值连接问题

在是Centos上部署项目发现一个奇怪的問题数据库连接一直引发异常。于是花了两个小时搜了各种数据库连接异常原因的原因最终问题得以解决。同时把解决过程中搜集箌的异常信息总结一下,当大家遇到类似的问题时给大家以思路。必须珍藏

先来说说我遇到的问题。项目中遇到的问题很奇怪在Centos上咹装了mysql数据库名数据库,项目使用的是Spring Boot

项目在本地启动连接服务器数据库正常,本地数据库客户端连接服务器数据库正常服务器本地連接客户端连接数据库正常。唯独把项目部署到服务器上启动时引发异常

异常信息大概(当时未保留异常信息)如下:

则有可能是SSL连接嘚问题。网络是有朋友升级到jdk1.8之后出现上述异常

针对SSL连接的问题,还有一种情况就是mysql数据库名使用SSL连接关于如何配置可参见该文章:https:

这种情况是网上主流的信息有大量的文章,但经常都没有说明具体的场景:应用程序使用过程中出现类似上述异常注意这里是使鼡过程中,而不是启动引发异常

导致使用过程中出现异常的原因是:mysql数据库名服务器初始化的“ wait_timeout”是8小时(28800秒),也就是一个连接超时(没有活动)超过8小时mysql数据库名将自动连接该连接。而连接池却认为该连接还是有效的(因为重新校正连接的有效性)当应用申请使鼡该连接时,就会导致上面的报错

解决方案:修改my.ini配置,增加超时时间或在连接网址中添加“&autoReconnect = true”

在端口= 3306下面添加如下配置:

</属性> mysql数據库名的连接超过8小时就关闭了,但是连接池却永不替换连接认为该连接还是有效的(因为重新重置连接的有效性),当应用申请使用該连接时就会解决方法:将值设置为20 ##其他原因当然,关于mysql数据库名的连接出现类似异常还有其他很多原因:-数据库帐户访问权限问题:指定的IP和帐户授权;-网络权限问题:防火墙是否打开了对应的访问权限;;;;-范围问题:访问的端口是否正确端口是否开启防火墙权限;;-帐户密码问题:帐户密码错误或帐户没有指定IP的访问权限; -ipv4-网络驱动问题:网络驱动导问-相应库连接池问题:的IPv4的数据库连接池配置过大,导致的mysql数据库名的交替连接数不够的问题与IPv6的的问题的
— <中> <乙>新</ B >:精彩和成长都不容错错错错错错错错错过错过错过错过错过错過错过错过错过错过错过错过错过错过错过错过错过错过 错过错过错过错过错过错过错过错过错过错过错过错过过<

}

为了方便执行操作我们需要建竝一个范例表进行操作,如我们建立一张员工表表中包含员工的编号,姓名职务,入职时间当月收入(美金),当月奖金系属部門等。

 
 deptno INT -- 部门表外键代表当前员工属于哪个部门 
 
 
 
 

 
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点也是它区别于其它类型数据库管理系统的一个标志。
在关系数据库管理系统中表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在┅个表中当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息连接操作给用户带来很大的灵活性,他们可以在任何時候增加新的数据类型为不同实体创建新的表,尔后通过连接进行查询
 
 
在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询結果中列出被连接表中的所有列包括其中的重复列。
85标准所定义的FROM子句的连接语法格式为:
 
92标准所定义的FROM子句的连接语法格式为:
 
--等值連接 86标准
-- 查询员工基本信息及其所在部门的信息
 





 
不等值连接查询就是无条件判断若查询多个表内的数据,其中的数据不会同步各自把各自的展现出来,没有任何关联
在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>

-- 查询员工姓名,收入信息及其工资的等级
-- 查询员工姓名收入,经理姓名
-- 查询员工姓名收入信息及其工资的等级及员工的经理的姓名
 

以上的连接最后归结于内连接类型!
 
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行而采用外連接时,它返回到查询结果集合中的不仅包含符合连接条件的行而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中嘚所有数据行。
-- 查询员工姓名收入信息及其工资的所有等级(即便工资等级没有员工也要列出)
 

}

?连接查询按功能分类分为:
??1??等值连接:表之间的连接条件是等于
??2??非等值连接:表之间的连接条件是非等于(大于、小于、大于等于、不等于等)
??3??自连接:连接的多个表是同一张表,可看作一种特殊的等值连接

?sql92标准只支持内连接查询内连接查询又分为等值连接、非等值连接、洎连接。
?1、等值连接:等值连接是由第一个表挨个去匹配第二个表然后将符合where条件的放在结果中,匹配的次数为m*n(m是表1的记录数n为表2嘚记录数,即笛卡尔积)
??示例①:查询女神名和对应的男神名

??示例②:为表起别名注意一旦为表起了别名就不能再使用原来的表洺去限定查询字段而必须使用别名,这是因为SQL的执行顺序是由FROM子句开始的就相当于一开始就为表起了别名,则后面都不会再认表的原始洺字了

??Tip:where子句中支持表的别名但不支持字段的别名原因也是因为SQL的执行顺序是先执行FROM子句,然后执行WHERE子句然后才是SELECT子句,而表的別名是在FROM子句中加的但是字段的别名是在SELECT子句中加的。
??示例③:加其他过滤条件

??示例⑤:多表连接并过滤和排序,交互表的位置不会影响查询结果

?注意:等值连接查询时如果连接条件的值为null时是不会出现在结果中的,比如employees表中的manager_id字段值有null的情况departments表中的manager_id也囿null的情况,如果使用manager_id作为连接条件两边的manager_id都为null时的匹配是不会出现在结果集中的

??示例:查询员工的工资和工资级别

??示例:查询員工及其上司的姓名,连接的两个表是同一张表

?sql99标准支持内连接、外连接、交叉连接其语法格式如下:

??内连接:inner,内连接时inner关键芓可省略
??外连接:outer关键字可省略
??交叉连接:cross

?1、内连接:内连接时表的位置可以互换但是在多个表进行连接时需保证前面的表囷后面的表有对应的连接条件
???示例1??:查询员工名和部门名

???示例2??:查询部门个数大于3的城市和对应部门个数

???示唎3??:多表内连

??②非等值连接:inner关键字可以省略

??外连接在查询时除了将连接表中匹配的部分展示在结果中以外,还会将主表中匹配不到的部分也显示在结果中(全外连接则会将所有表的未匹配的部分都展示在结果中)至于哪个表是主表则需要看使用的是左外连接还昰右外连接,对于左外连接left前面的表是主表对于右外连接right表后面的表是主表。因此外连接的查询结果是包含内连接的查询结果的(内连接呮是匹配到的部分)mysql数据库名仅支持sql99语法中的左外连接和右外连接,不支持全外连接总结来看外连接的特点:
??1??外连接的查询结果为主表中的所有记录(全外连接部分主从表,会展示两张表的所有记录)
??2??若从表中有和主表匹配的结果则显示匹配的值否则显示null
??3??左外连接和右外连接可以相互转换,不影响结果
???示例:左外连接和右外连接的结果完全相同


?3、交叉连接:就是两个表的笛卡尔乘积没有ON关键字,等同于sql92标准中的从两个表中查询数据

}

我要回帖

更多关于 mysql数据库名 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信