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不会相同)
原文地址:https://www.cnblogs.com/yangxiayi1987/p/13212507.html