颜海东:数据库重启后,为防止应用因为连接池的源不可用的重连配置

    前段时间应用在晚上突然会出现应用不可用的情况,只有经过长时间(大约10分钟)或者应用重启后,访问才能再次正常。查看日志,其中报大量的数据 库连接异常。如下:

        Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
        --- The error occurred in sqlmaps/price.xml.
        --- The error occurred while applying a parameter map.
        --- Check the dayprice.QUERY-PRICE-BY-THEME-ID-InlineParameterMap.
        --- Check the parameter mapping for the 'themeId' property.
        --- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed.
                at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:185)
                at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123)
                at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:615)
                at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589)
                at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
                at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:298)
                at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209)
                ... 50 more
        Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed.

    怀疑是数据库连接有问题,因此联系了DBA,DBA查看日志后发现当时数据库进行了一次主库和备份 库之接的切换。为什么要做这个切换呢?这是由于数据库那边有一个HA机制。所 谓HA机制就是数据库的高可用性保障机制,目前价格行情中通过一个心跳机制,每隔一段时间会由备份库去ping主库,如果无法ping通,则会进行一次主 库和备份库之间的切换。
    一开始,认为这是由于数据库重启,导致了不能访问数据库从而导致了应用不可用。但是数据库重启时间只有20秒左右,应该无法导致这么长时间的不可用。然后 在本地机器上安装了mysql数据库进行了测试发现,应用在数据库重启,正常可用之后仍然无法正常 访问。后发现这是由于在数据库重启之后,在连接池中已经在使用的连接均会失效,如果后续的访问不幸取到这些连接的话,则仍然无法正常访问数 据库。
    那么如何使应用在数据库连接失效之后,能够将这些连接马上失效,并取到可用的连接呢?其实很简单,只需要在数据库连接池配置中加一个配置项即可。目前看了 一下各个应用,有三种不同的实现方式:

    1、针对proxool连接池,因此只需要如数据库连接url中加入红圈内的autoReconnect=true即可:


    2、针对DBCP连接池,有两种操作方式:

    2.1)、加一个配置项check-valid-connection-sql,这个配置项的作用是在 sql执行之前执行一条在这个配置项中配置的sql:SELECT @@SQL_PING,根据返回信息来判断这个连接是否可用,如果不可用则将之废弃,然后创建一个新的连接供这个数据库请求使用。


    2.2)、其中的作法也是加了一个配置项,就是exception-sorter-class-name,这个配置项的 作用是捕获数据库请求中所返回的异常,如果是可以判定为该连接失效的异常,则将这个连接废弃。(这个配置项的内容mysql和oracle都有各自的异常 捕获类)



  DBCP中的两种不同的配置方式,各有长处吧,用check-valid-connection-sql可以在连接失效时 重新取得连接来尽量保证此次数据库请求正常,而缺点是每次执行sql都要额外执行一次验证sql;而exception-sorter-class- name虽然不用每次额外执行一条sql,但是在取到失效连接那次访问依然不能使用。

 

    既然DBA那边对数据库配置了HA机制,而且据 DBA说HA机制会偶有“抽风”的现象,因此就会偶 尔的出现这样的切换情况,因此各个应用最好检查下各自的应用中有没有在DBCP中配置相关内容,保证数据库重启后的重连。

 

 

 

 

 

【MicroPython编程-ESP32篇:设备驱动】-SHT31温度湿度传感器驱动 SHT31 是 Sensirion 的下一代温湿度传感器。 它建立在一个新的 CMOSens® 传感器芯片之上,该芯片是 Sensirion 新湿度和温度平台的核心。 阅读详情

相关推荐

05、基于ALV表报实现复选框、全选、取消全选等功能

基于Function ALV实现复选框、全选及取消全选等功能

wo520yl1314的博客 2370

关于Druid连接池遇到数据库挂了,重启遇到的问题解决方法

项目在线上环境测试时发现一个问题,就是如果数据库关闭了,然后重启,获取数据库连接一直是超时状态。网上查了很多资料,才知道了原因,Druid数据库连接池配置中的BreakAfterAcquireFailure属性设置为true就可能会出现数据库关闭重启,一直获取不到连接。 BreakAfterAcquireFailure是设置是否失败重连,默认为false。 false表示新的请求都会尝试去数据库请求connection,但是当获取不到连接的时候,Druid将会无限的打印获取不到连接的异常...

weixin_37607613的博客 9622

搞定汽车座椅电机EMC超标:一个PCB滤波板的实战设计与避坑心得

本文详细介绍了汽车座椅电机EMC超标问题的解决方案,通过PCB滤波板的实战设计,解决了传导发射测试超标问题。文章分享了在空间受限条件下的滤波电路架构设计、接地系统优化及迭代验证过程,为汽车直流电机的EMC整改提供了实用方法论。

weixin_30336061的博客 378

springboot druid 数据库连接池连接失败后一直重连

在使用个人阿里云测试机,在查询实时输出日志时,看到数据库连接失败后,服务器一直在重连服务器。开始以为是遭受重复攻击,后面把服务重启后,就没有出现一直重连的情况。看以下输出日志: 2022-02-09 11:04:58.896 ERROR 16876 --- [eate-1550991149] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://47.98.67,98:1234

qq_42700121的博客 1万+

Latex参考文献中大写字母编译后自动变成了小写,如何保持原字母大写形式

bib文件参考文献中大写自动变为小写,如何保持原大写问题。Latex: 保持参考文献大小写,overleaf文献编译后,原大写字母自动变成了小写字母,如何保持原字母大写

我的个人博客 5804

STM32 (基于HAL库) 硬件IIC任意地址读写任意字节----AT24CXX芯片

转了一圈,发现有关STM32的iic的硬件是使用比较少,基于HAL库的就更少,传统的,大家都是采用软件模拟的。有iic的协议相对复杂,同时灵活,尤其是不同的设备的I2C通信组合变化也不同,使用灵活的软件模拟也是可以理解的,在加上I2C的设备读写速度都比较低,硬件读写的优势就更无法体现,哪怕硬件I2C可以开启DMA,甚至在随机的读取少量字节的情况下。开启DMA反而效果更差。自然而然的硬件I2C就无人问津了。

qq_32273059的博客 1579

数据库连接池

一、java应用程序访问数据库的过程:1)装载数据库驱动程序2)通过jdbc建立数据库连接3)访问数据库,执行sql语句4)断开数据库连接二、存在问题:1)每次web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都要花费0.05s~1s时间,且系统需要分配内存资源执行一次或者几次的数据库操作,不受太大影响,但是对于请求数据量过大,例如各大电子商务网站,频繁的请求且进行数据库连接操作势必...

zhangyi_1027的博客 560

linux中的sendmail发送邮件

linux下的sendmail发送邮件

无痕的博客 6417

数据库重启,应用服务器需要重启的解决方法

我系统中用到了spring+hibernate的框架,如果和数据库连接断了,而马上数据库又能用了,hibernate不会重新获得连接了,如何才能再初始化sessionFactory呀,因为hibernate默认的连接池是dbcp,但是dbcp不支持异常重新连接,所以出现这个问题。解决办法: 改用C3P0连接池,这个连接池会自动处理数据库连接被关闭的情况。要使用C3P0很简单,先从Hibernat

myfuturein的专栏 1万+

RIP协议

一、 Rip简介 早期在unix系统上使用,1988年才发布第一个rip协议标准“RFC1058”,是一种距离矢量(Distance-vector)协议。 1. 特点: 只关心跳数,下一跳,不关心整网拓扑。 基于传闻的路由协议。 2. 场景: 适用于规模小且可靠性要求低的网络环境,部署简单,因为其跳数限制,不适用于大型网络。 3. 工作原理: - 开启RIP发送RIP请求 - 接受请求发出响应...

ledrsnet的博客 8607

Agisoft Metashape 基于RTK技术的无人机航测免像控技术流程

利用无人机进行航空摄影测量,其使用方便、快速获得成果,已经是测绘行业外业生产的主要方式。RTK定位系统的出现,其厘米级的定位系统,使得航测无人机在作业时,能够准确获取拍照时的GPS位置,能够大量减少像控点,即使不使用像控点也能满足规范对精度的要求。可以有效解决特殊地形(如山川、峡谷、河流、沼泽、水库等)外业人员很难布设像控点的情况。

penglu366366的博客 2188

数据库重启之后,应用不重启连不上数据问题解决

之前我们公司出现一个问题:hive重启之后,应用访问不了hive。 解决方案是在数据源上配置上两个参数(标红部分):

Ming_key的专栏 5789

【openwrt-21.02】T750 openwrt 双系统说明及切换方法

高度集成的 T750 平台大幅减少组件数量,为产品设计者提供更小的尺寸和更低的功耗。T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。3. preloader 加载并启动 A 系统,若 A 系统的任一启动阶段加载失败,preloader 将重新加载并启动 A 系统 3 次,若 3 次均失败,则自动切换至 B 系统,加载并启动 B 系统。A/B 系统切换流程如下。

wgl307293845的博客 1412

在数据库重启之后无法重新连接数据,无法正常提供服务问题解决

在Tomcat中配置c3p0数据库连接池的时候,如果数据库重启,或者网络原因造成服务器和数据库断开连接,Tomcat便再也不能和数据库连接,除非Tomcat服务重启。 解决办法是在c3p0的配置中增加两个参数  testConnectionOnCheckin  true  idleConnectionTestPeriod  60 这样配置之后,连接池每隔60秒自动检测数

okkeqin的专栏 6341

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ibatis配置问题

1.错误日志:      --- The error occurred while applying a parameter map.  --- Check the MS-EXTERFACE-MANAGE-SELECT-PARTNER-EXTERFACE-BY-ID-InlineParameterMap.  --- Check the statement (query failed).  ---

一路向北 3197

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ibatis使用报错:Check the result mapping for the ‘xxx‘ property,quoted string not properly terminated

在使用ibatis的时候报这个错误,挺常见,一般我们就会去检查SQL查询的字段和resultMap是否对应。 可是这次经过我仔细的检查之后,发现写的都是对的。只好采用排除法来检查错误。 首先把报错的字段、属性在SQL和resultMap中分别去掉,去掉之后呢,依旧报错,但是报错信息变了——check the paramter mapping for the ‘xxx’ property。 这次变成了入参错误,但是我其他几个方法也用到了相同的参数啊,并没有报错。所以这次去掉筛选条件,没有入参,只有一段干

FlyToMyHeart的博客 3881

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python 提取固定列名数据_python获取数据库列名

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户的数据库应用系统进行性能和风险评估,参与配合进行数据压测演练,提供数据库优化方面专业建议,在业务高峰期与用户共同保障数据库系统平...

weixin_39806288的博客 6249

Mysql数据库

Mysql数据库日常维护。

qq_43013492的博客 641

自动重启weblogic 数据库连接池的WLST脚本

当数据库重启导致数据库连接丢失后, 不需要重启整个WebLogic Server , 而是可以仅重启数据源连接池就可以。该方法既可以 通过控制台执行, 也可以通过脚本的方式执行, 当WLS实例特别多是时候,建议用脚本执行,比较快。 如是ORACLE数据库,通过WLS的GRID LINK, GRIDLINK 类型的数据源应该是可以自动重连接的,连数据源重启动都不需要了。非ORACLE数据库只

xcjing的博客 2176

mysql 重启服务才能连接,MYSQL运行1到2天会连接不上 好奇怪 面板显示启动着的 就是连接不上 必须重启服务器重新启动...

一下是错误代码:200824 21:25:53 [Note] Plugin 'FEDERATED' is disabled.200824 21:25:53 InnoDB: The InnoDB memory heap is disabled200824 21:25:53 InnoDB: Mutexes and rw_locks use Windows interlocked functions20...

weixin_33978451的博客 564

重启数据库服务器后数据库无法连接的解决方法

重启数据库服务器后数据库无法连接的解决方法

xuan2717的博客 1619

解决数据库无法连接问题

数据库出现{TOC1045 Access denied for user ‘root’@‘localhost’ (using password: YES)}问题 由于有一段时间没有用数据,最近用的时候告诉我无法链接,先爆了个错( can’t connect to mysql server on localhost(0) 错误号码2003) 我发现这个错原因是MySQL服务未启动,然后我去服务那个地方去启动,最终问题再这个报1045的错上。下面说一下怎么解决: 首先你需要编辑mysql配置文件my.ini(这

black_tomorrow的博客 3785

Yml的基本配置(服务器端口、日志、JPA、Druid、环境激活、thymeleaf、resource)

Yml的基本配置(服务器端口、日志、JPA、Druid、环境激活、thymeleaf、resource)

记录和分享属于我的“IT”时光。 3896

重启服务器对数据库有影响吗,网站或数据库服务器需要定期重启吗?

目前网站服务器系统无非两大类,一类是基于windows下的,一类是基于linux下的,目前比较常见的服务器系统是windows 2012、2016/centos7.*版本。其实服务器是否需要定期重启,与使用方式,管理方式有一定的关系。为什么这么说?如果服务器本身运行的服务不重要,相信也没有多少人会经常登录管理,最后直到宕机或被入侵才想起来查看。对于windows服务器而言,微软定期会有相关月度补丁...

weixin_35929851的博客 2818

DBCP,CP30及proxool连接池在spring+hibernate中的配置

用spring默认的连接池性能效率不高, 如果数据库重启, 应用程序也要重启才能使用, 这样比较麻烦, 下面介绍三种流行的连接池配置: DBCP连接池的配置: &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"&gt; &lt;property name="driver"&gt; ...

生活在爪洼岛上 205

ORACLE之连接

1.内连接:inner join 查询两个表中相同的所有行,左、右连接#的交集。 2.左连接:A left join B on (A. =B. ),以A表为主,A表有,B表无加null 3.右连接:A right join B on (A. =B. ),以B表为主, B表有,A表无加null 4.完全连接: A full join B on (A. =B. ),A表有,B表无加null,B表有,A表无加null ,左、右连接的并集。 5.外连接: 左外连接:(A left outer join B)

Qdblinxi的博客 468
上一篇: 黄晓童的Spring 学习笔记,加了比喻及示例,非常好,分享给大家
下一篇: 修改DEDECMS标题显示长度,以及鼠标悬停显示完整标题的操作方法
冯立彬
冯立彬 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄21年 5458粉丝 593原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值