zoukankan      html  css  js  c++  java
  • MySQL随笔(一)

    一、MYSQL 获取当前时间加上一个月

     update user set leverstart=now(),leverover=date_add(NOW(), interval 1 MONTH) where id=1; 

    注:

    date_add() 增加   date_sub() 减少

    month 月份  minute 分钟 second 秒

    now() 当前时间

    二、Mybatis批量插入数据

    ServiceImpl:

    List<ReportWarrantDetail > reportWarrantDetails = new ArrayList<>();
    ReportWarrantDetail reportWarrantDetail = new ReportWarrantDetail();
            reportWarrantDetail.setId("1");
            reportWarrantDetail.setParentId("2");
            reportWarrantDetail.setTransDate(new Date()); 
            reportWarrantDetails.add(reportWarrantDetail);
    Integer count = reportWarrantDetailMapper.insertBatch(reportWarrantDetails);
          

    Mapper.java:

    int insertBatch(List<ReportWarrantDetail> reportWarrantDetails);

    Mapper.xml:

     <insert id ="insertBatch" parameterType="java.util.List" >
            <foreach collection="list" item="reportWarrantDetail" index="index" separator=";">
            insert into t_report_warrant_detail
            <trim prefix="(" suffix=")" suffixOverrides="," >
                id,parent_id,trans_date,
            </trim>
            values
            <trim prefix="(" suffix=")" suffixOverrides=", " >
                #{reportWarrantDetail.id,jdbcType=BIGINT}, #{reportWarrantDetail.parentId,jdbcType=BIGINT}, #{reportWarrantDetail.transDate,jdbcType=TIMESTAMP}, 
            </trim>
            </foreach>
        </insert>

    注:

    对于foreach标签的解释参考了网上的资料,具体如下:

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

    foreach元素的属性主要有 item,index,collection,open,separator,close。

    item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

    1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

    2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

    3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map

    使用批量插入执行的SQL语句应该等价于:
     insert into t_report_warrant_detail (id, parent_id, trans_date) values (?,?,? ),(?,?,? ),(?,?,? ),(?,?,? ),(?,?,? )

    三、批量更新

    Mapper.xml:

        <update id="updateBatch" parameterType="java.util.List">
            <foreach collection="list" item="reportWarrantDetail" index="index" open="" close="" separator=";">
            update t_report_warrant_detail
            <set>
                is_valid = 'N',
                update_time = now(),
            </set>
                where id = ${reportWarrantDetail.id}
            </foreach>
        </update>

    四、mysql按,分隔字符串

    在mysql中提供了一些字符串操作的函数,其中SUBSTRING_INDEX(str, delim, count)

    str: 要处理的字符串

    delim: 分割符

    count: 计数 如果为正数,则从左开始数,如果为负数,则从右开始数

    例:

    str = 'www.baidu.com';

    SELECT substring_index('www.baidu.com','.', 1);    #www
    SELECT substring_index('www.baidu.com','.', 2);    #www.baidu
    SELECT substring_index('www.baidu.com','.', -1);   #com
    SELECT substring_index('www.baidu.com','.', -2);   #baidu.com
    SELECT substring_index(substring_index('www.baidu.com','.', -2), '.', 1);  #baidu

    五、IF和IFNULL函数用法

    IFNULL(expr1,expr2) 

    如果 expr1 不是null,IFNULL返回 expr1,否则它返回 expr2。

    IF(expr1,expr2,expr3)

    如果expr1的值为true,则返回expr2的值,如果expr1的值为false,

    则返回expr3的值。

    六、Case。。。When。。。Then。。。End用法

    第一种:简单Case函数 

                  case 列名

        when   条件值1   then  选择项1

        when   条件值2    then  选项2.......

        else     默认值      end

    第二种:Case搜索函数

                  case  

        when  列名= 条件值1   then  选择项1

        when  列名=条件值2    then  选项2.......

        else    默认值 end

    比较: 两种格式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。

    还有一个问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。如下面这个例子:

    CASE col

    WHEN col_1 IN ( 'a', 'b') THEN '第一类'

    WHEN col_1 IN ('a')      THEN '第二类'

    ELSE'其他' END

    这个语句中,满足条件a永远不会返回第二类,因为按顺序发现a在第一类的时候查询就已经结束了。所以case无法用于一个东西在一个分类里有不同的属性的条件。

    case when 好处很明显就是非常易于看懂,相比实现同样条件用复杂的自连接查询,在逻辑上很容易看懂(自连接查询在不同的情况下可能会有BUG)。

                                                        待续。。。
  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/wmy666/p/13530545.html
Copyright © 2011-2022 走看看