• 数据库杂记


    1. ConfigFilter的作用包括:

        从配置文件中读取配置

        从远程http文件中读取配置

        为数据库密码提供加密功能

        参见:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

    2. DruidDataSource配置属性列表配置,详见:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

        1)maxActive 最大连接池数量;maxIdle 已经不再使用,配置了也没效果。

        2)validationQuery 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。

        3)testOnBorrow 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

        4)testWhileIdle 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。

        5)poolPreparedStatements 这个是设置有争议。

              a. DruidDataSource配置属性列表配置 给出的建议:是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。

              b. infoQ中  浅析MySQL JDBC连接配置上的两个误区   文章给出的建议,新版本建议设置为 true。数据库连接池是否需要配置 poolPreparedStatements 为true: 新版本建议打开

                  参见:http://www.infoq.com/cn/news/2017/03/Analysis-errors-MySQL-JDBC

    3. mysql主从复制

        1)master在执行sql之后,记录二进制log文件(bin-log)。

        2)slave连接master,并从master获取binlog,存于本地relay-log中,然后从上次记住的位置起执行SQL语句,一旦遇到错误则停止同步。

        从以上mysql的Replication原理可以看出:

        * 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间主从数据不一致的情况。

        * 如果主从的网络断开,则从库会在网络恢复正常后,批量进行同步。

        * 如果对从库进行修改数据,那么如果此时从库正在在执行主库的bin-log时,则会出现错误而停止同步,这个是很危险的操作。所以一般情况下,我们要非常小心的修改从库上的数据。

        * 一个衍生的配置是双主、互为主从配置,只要双方的修改不冲突,则可以工作良好。

        * 如果需要多主库的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

    4. MySQL 一表中字段内容是用逗号分隔的 另一表含有对应数据的两表联合查询

        举例:select staff.id,staff.leaderid,GROUP_CONCAT(leader.name) as '领导姓名'   from staff JOIN leader   ON FIND_IN_SET(leader.id,staff.leaderid)  GROUP BY staff.id  

        参见:https://blog.csdn.net/knight_quan/article/details/51767827

    5. 查询数据库中所有表名:select table_name from information_schema.tables where table_schema='csdb' and table_type='base table';

        查询指定数据库中指定表的所有字段名column_name:select column_name from information_schema.columns where table_schema='csdb' and table_name='users'

    6. mybatis中使用union all    

    <select id="getProductEnableNumberInfos" resultMap="productMap" >
              SELECT CDSK_ITEM_CODE ProductCode,WMST_SKU_UNIT ProductUnit,WMST_ENABLED_NUMBER ProductNum from (
                  <foreach collection="conditions.list" item="item" index="index" separator="union all">
                    SELECT c.CDSK_ITEM_CODE,WMST_SKU_UNIT,SUM(WMST_ENABLED_NUMBER) WMST_ENABLED_NUMBER FROM wm_stock_${conditions.esCorCode} w 
                    LEFT JOIN cd_wh_itme_${conditions.esCorCode} c ON w.WMST_SKU_ID=c.CD_ITEM_ID
                    WHERE c.CDSK_ITEM_CODE=#{item.ProductCode,jdbcType=VARCHAR}
                    AND w.WMST_SKU_UNIT=#{item.ProductUnit,jdbcType=VARCHAR} 
                    AND w.WMST_WR_ID=${conditions.wrId} AND w.WMST_CUSTOMER_CODE=#{conditions.customerCode,jdbcType=VARCHAR} 
                  </foreach>
                 ) alias WHERE alias.WMST_ENABLED_NUMBER>0;
        </select>

     7. 

  • 相关阅读:
    30网络通信之多线程
    U盘自动拷贝
    多态原理探究
    应用安全
    应用安全
    编码表/转义字符/进制转换
    代码审计
    文件上传
    渗透测试-Web安全-SSRF
    中间人攻击
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/9021354.html
Copyright © 2020-2023  润新知