zoukankan      html  css  js  c++  java
  • MYSQL学习记录

    常用日期操作语句:
    select now() : 获取当前系统时间
    date_add(): 增加一个时间间隔
    select date_add(now(),interval 8 hour); —— 加8个小时
    例子:update table t set t.time = date_add(t.time, 1 day) 
    日期比较:
    between timestamp1 and timestamp2 :
    select count(*) from task_manager.tasks where created_at between '2020-11-03 11:30:01' and now()
    使用unix_timestamp()进行比较:
    select count(*) from task_manager.tasks where unix_timestamp(created_at) > unix_timestamp('2020-11-03 11:30:01')
     
     
    insert语句基本语法:
    INSERT INTO object (id,name,description,profile,type,profile_type,create_time) VALUES ('88888','978215d2-19f8-4dac-bf00-8daa10e1cc7f','','','person',1,1592539376142);
    INSERT INTO media (feature,name,object_id,path_type,path,user_id,type,is_profile,create_time) VALUES ('{"module": "face_feature_extract", "features": [{"pts": 0, "feature": "epI1PjXNgLxpHN+9p7sPPP9pUT3nfJG8lEcmvXOsHzxiMQA+x/kGPmufXj3XJfK984/ePOT9yr04okC9KySPvRxE0Dxy1S0+cRI2PU6kTT41wQc+p3TCPKWHzz1XwP+9dpeRvWtri70UcCu8feC+POBymr1bJ/S9LN66vDggxzxHnUM9mj3gvcLn1bvkMn68GphLPZdJwL2btgS+DdlIPQ5IBr4QbYg9yUYBvZmDR70rg9U8s4mavUB4ybsA0VC9y+QGPQNlPDqr3rc8gzGcPTTo7LyaS8S9pK3YOighkb2nmxM9nVWiO5BCBD1keJc7fXdBvLFl7jy94tE7dpVaPbR5tzy+4SM9QlTNPaS7xL0DLqy8RA5wPZFcX71iPFW9D9AmPbmzLDxIDKs9Uc+Fu72WaD06pdA83iWpvFjZV722tZi79CKIvbBDo71j8dC9FcEKPusdnT0Y2Ya9778LveHbCLy/vxW7XNKJvCT6Aj1+L7w9ucghPIg/pTwPO9i9EzU6PesMED0FOeq87iQwvTsXn73mQKo8dqszvYv9qr3sb9o9fMBlvZzpRT0HPqO9iMRpPTXJAL3B16q83/hPPUIaaj2K6zs7xIMOPXLGOrukDbm9fZnvPPL1BL7hod081/tTvSpj3T0iS029bPUBvEtvQ71jm8U9Kr2NvT2HzD1eos49alS/PauQUT0fd2g9sn0dPbShmLzoZyA6aXKovdtliL0p02E86gOLvUEgwTx0qH48XQ+6u3U0HbwwmxG+igUFPTg/nzuMUdK617jPvV2PJ72iPUA8JMAkvbhvLr0WGQM97mZTvZdUWD3dm2o97FMKPr5Hnj3xrEe9i72tve8J3LyVTYy9ZV58vUWaHj0h2jw9aOLmPNIO4D35ccS8EoEGPW0yKr2Bxic8Fr9HuuiZjT069NE8Q1IdvB3opTzhsqC8450oPXocAb09lNC8+iT8vLda6T2kiSw9IpXIOyqYLLyod4e9JSSMPbj+sr3P67E9MJVYvb2lcT21yhI+yjihPCNZJz0a/rk8eALYO7XHaD3Qe3K7Fq2AvShOgr29swe8UUAMPY6Wj70fvo69jdStvLAiiDzth5093sgmPO6sC7xWcTy7XFdaPYVWZrx8hKg4Q0VHvczlsL3x0h095276vFoMO71C5qe814OMPaSO+jy5yRM9YGnTO6svsr25M1C8Ai2Cvdj/GL0QvKc7qhqLPO+IybtYBla9lgUmPUM/Dz3OK069Ywz9PNArDj2lRIA9eiiqval5l71c9DQ9Kp3mO0cdcz1Fpio8GK3ePUFFbz1yJRM9yrZJPQxjgz3UKU29tEv0PCnZjD3U1929Ij18PY3S+DxD3rA80b1/vQ==", "quality": 0.7568554282188416, "attributes": {"yaw": -2.4445905685424805, "blur": 0.9984091520309448, "roll": -0.5372490286827087, "pitch": 19.31710624694824, "vertices": [37, 2, 300, 2, 300, 220, 37, 220]}}]}','1164852391222887965.jpg',70000,2,'',1,1,0,1592496014567)
     
    insert语句的三种常见写法:
    方式1、 INSERT INTO t1(field1,field2) VALUE(v001,v002);            // 明确只插入一条Value
    方式2、 INSERT INTO t1(field1,field2) VALUES(v101,v102),(v201,v202),(v301,v302),(v401,v402);
    在插入批量数据时方式2优于方式1.
    方式3.1、  INSERT INTO t2(field1,field2) SELECT col1,col2 FROM t1 WHERE ……
    这里简单说一下,由于可以指定插入到talbe2中的列,以及可以通过相对较复杂的查询语句进行数据源获取,可能使用起来会更加的灵活一些,但我们也必须注意,我们在指定目标表的列时,一定要将所有非空列都填上,否则将无法进行数据插入,还有一点比较容易出错的地方就是,当我们写成如下简写格式:
    方式3.2、  INSERT INTO t2 SELECT id, name, address FROM t1
    此时,我们如果略掉了目标表的列的话,则默认会对目标表的全部列进行数据插入,且SELECT后面的列的顺序 必须和目标表中的列的定义顺序完全一致 才能完成正确的数据插入,这是一个很容易被忽略的地方,值得注意。
     
    ON DUPLICATE KEY UPDATE添加或更新(主键是索引)
    insert into ys_yssf_rj
    (customerId,settleDate,settleMoney,
    settleActual, settleBalance,settleAccountState)
    VALUES
    (#customerId#,now(),#settleMoney#,
    #settleActual#,#settleBalance#,#settleAccountState#
    )
    ON DUPLICATE KEY UPDATE
    settleDate = now(),
    settleMoney = #settleMoney#,
    settleActual = #settleActual#,
    settleBalance = #settleBalance#,
    settleAccountState = #settleAccountState#
    以前的做法是先根据主键去查找是否存在记录,找到就update,找不到就insert。需要写两条语句
    on duplicate key update 的写法,很简单的解决了上面的问题,而且只需要写一条语句。
     
    以上两个语句组合使用示例:
    insert into table_a(id,col1,col2,col3) select replace(uuid(),'-','') id,p.col1 ,p.col2,p.col3
    from (select q.col1,q.col2,q.col3 from pl_info q ) p on duplicate key update col3 = p.col3
     
     
    MYSQL存储过程批量插入数据:
    //使用存储过程,批量插入object,主键ID自增auto_increment
    CREATE DEFINER=`root`@`%` PROCEDURE `insert_object_test`()
    BEGIN
    DECLARE i INT;
      SET i=1;
      WHILE(i<=10000) DO
        INSERT INTO object (name,description,profile,type,profile_type,create_time) VALUES ('978215d2-19f8-4dac-bf00-8daa10e1cc7f','','','person',1,1592539376142);
        SET i=i+1;
      END WHILE;
    END

    //使用存储过程,批量插入media,采用函数生成动态生成主键UUID
    CREATE DEFINER=`root`@`%` PROCEDURE `insert_media_test`()
    BEGIN
    DECLARE i INT;
      SET i=1;
      WHILE(i<=900000) DO
        INSERT INTO media (id,feature,name,object_id,path_type,path,user_id,type,is_profile,create_time) VALUES (REPLACE(UUID(), '-', ''),'{"module": "face_feature_extract", "features": [{"pts": 0, "feature": "epI1PjXNgLxpHN+9p7sPPP9pUT3nfJG8lEcmvXOsHzxiMQA+x/kGPmufXj3XJfK984/ePOT9yr04okC9KySPvRxE0Dxy1S0+cRI2PU6kTT41wQc+p3TCPKWHzz1XwP+9dpeRvWtri70UcCu8feC+POBymr1bJ/S9LN66vDggxzxHnUM9mj3gvcLn1bvkMn68GphLPZdJwL2btgS+DdlIPQ5IBr4QbYg9yUYBvZmDR70rg9U8s4mavUB4ybsA0VC9y+QGPQNlPDqr3rc8gzGcPTTo7LyaS8S9pK3YOighkb2nmxM9nVWiO5BCBD1keJc7fXdBvLFl7jy94tE7dpVaPbR5tzy+4SM9QlTNPaS7xL0DLqy8RA5wPZFcX71iPFW9D9AmPbmzLDxIDKs9Uc+Fu72WaD06pdA83iWpvFjZV722tZi79CKIvbBDo71j8dC9FcEKPusdnT0Y2Ya9778LveHbCLy/vxW7XNKJvCT6Aj1+L7w9ucghPIg/pTwPO9i9EzU6PesMED0FOeq87iQwvTsXn73mQKo8dqszvYv9qr3sb9o9fMBlvZzpRT0HPqO9iMRpPTXJAL3B16q83/hPPUIaaj2K6zs7xIMOPXLGOrukDbm9fZnvPPL1BL7hod081/tTvSpj3T0iS029bPUBvEtvQ71jm8U9Kr2NvT2HzD1eos49alS/PauQUT0fd2g9sn0dPbShmLzoZyA6aXKovdtliL0p02E86gOLvUEgwTx0qH48XQ+6u3U0HbwwmxG+igUFPTg/nzuMUdK617jPvV2PJ72iPUA8JMAkvbhvLr0WGQM97mZTvZdUWD3dm2o97FMKPr5Hnj3xrEe9i72tve8J3LyVTYy9ZV58vUWaHj0h2jw9aOLmPNIO4D35ccS8EoEGPW0yKr2Bxic8Fr9HuuiZjT069NE8Q1IdvB3opTzhsqC8450oPXocAb09lNC8+iT8vLda6T2kiSw9IpXIOyqYLLyod4e9JSSMPbj+sr3P67E9MJVYvb2lcT21yhI+yjihPCNZJz0a/rk8eALYO7XHaD3Qe3K7Fq2AvShOgr29swe8UUAMPY6Wj70fvo69jdStvLAiiDzth5093sgmPO6sC7xWcTy7XFdaPYVWZrx8hKg4Q0VHvczlsL3x0h095276vFoMO71C5qe814OMPaSO+jy5yRM9YGnTO6svsr25M1C8Ai2Cvdj/GL0QvKc7qhqLPO+IybtYBla9lgUmPUM/Dz3OK069Ywz9PNArDj2lRIA9eiiqval5l71c9DQ9Kp3mO0cdcz1Fpio8GK3ePUFFbz1yJRM9yrZJPQxjgz3UKU29tEv0PCnZjD3U1929Ij18PY3S+DxD3rA80b1/vQ==", "quality": 0.7568554282188416, "attributes": {"yaw": -2.4445905685424805, "blur": 0.9984091520309448, "roll": -0.5372490286827087, "pitch": 19.31710624694824, "vertices": [37, 2, 300, 2, 300, 220, 37, 220]}}]}','1164852391222887965.jpg',70000,2,'',1,1,0,1592496014567);
        SET i=i+1;
      END WHILE;
    END
     
    解决批量插入时uuid重复问题:
    1、先使用uuid()函数产生id,外层再包裹一层查询,使用replace(id,'-','')进行去-操作;(没有效果,产生的id仍然相同)
    2、使用保证唯一的有规律字符串替换uuid,如上sql可以将stc_id,in_account_date组装成特定序列,作为ID;
    3、使用md5()对产生的uuid()做进一步转换,即md5(uuid());(有效,产生的id不会相同)
  • 相关阅读:
    5.不用拷贝的对象可以用ref
    4.bind绑定
    3.bind与仿函数以及普通函数
    35.自己实现vector模板库myvector
    2.boost遍历数组容器
    1.boost库的安装
    34.share_ptr智能指针共享内存,引用计数
    33.unique_ptr独享内存智能指针
    32.智能指针auto_ptr
    131.typename在嵌套类中的作用
  • 原文地址:https://www.cnblogs.com/yangxiayi1987/p/13212507.html
Copyright © 2011-2022 走看看