buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

mysql常用指令 / mysql常用命令 / mysql常用语句--mysql事务--mysql跨表update--mysql字符串与时间互转(varchar<->datetime)--mysql如何修改数据库名--mysql cast函数--show full processlist

 

求两个时间的差值使用TIMESTAMPDIFF函数

TIMESTAMPDIFF(MINUTE, a.create_time, a.payment_finish_time)>=5

mysql事务。事务默认是自动提交的。

(事务是用来做数据控制的,所以只针对DML(数据操控,增/删/改)起作用。建表和删除表属于DDL(数据定义),超出事务的范畴,所以事务对DDL不起作用。 )

START TRANSACTION;

-- DML here

ROLLBACK;

 【推荐】生产环境执行update或delete时,建议前后加上start transaction..rollback,预执行一下来确定是否符合预期,确定符合预期再执行也不迟。

 

mysql临时表

CREATE TEMPORARY TABLE tmp_table SELECT *FROM emax_base.`tax_user_sign`  WHERE merchant_id=1576834320215107;
-- select * from tmp_table
UPDATE tmp_table SET merchant_id=1576647918146389, create_time='2020-7-28 15:00:00',tax_sign_status='FAILED';
INSERT  emax_base.`tax_user_sign` SELECT * FROM tmp_table;

 

 

mysql select语句中显示行的自增序号

SELECT   (@i:=@i+1)   AS   rownum, a.entName ,a.orderId  FROM   `t_business_airorders202007` a,(SELECT   @i:=0)   AS   it

 

 

mysql 多表关联update

单表update:UPDATE  sbh_soho SET NAME='test' WHERE YF_SOHO_ID =201288;

update tmp_table2 a 
join tmp_table1 b ON a.rownum=b.rownum 
join t_business_airorders202008 c on a.orderId=c.orderId
set c.entName=b.entName;

     →ref:Mysql跨表更新 多表update sql语句总结 

mysql 表关联删除

DELETE t1 FROM t1,t2 WHERE t1.id=t2.id ;

DELETE m
FROM tmp m
JOIN tmp2 b ON m.usr=b.usr AND m.id>b.minId;

 

 在mysql中修改表名的sql语句(DDL)

ALTER TABLE emax_require RENAME TO `require`;

 

字符串与时间互转(varchar<->datetime)

两个函数:date_format(date, format)     str_to_date(str, format)

now()       date_format(now(), '%Y%m%d%H%i%S')
-------------------      ------------------------------------
2021-12-21 15:02:32      20211221150232



str_to_date('20160102123059', '%Y%m%d%H%i%S')
-----------------------------------------------
2016-01-02 12:30:59

 

mysql数据类型转换用cast函数

需要说的是

把数据转换为字符串时,用cast(var as char),注意是char,不是varchar

把字符串转换为数字,用cast(str as SIGNED/UNSIGNED/DECIMAL)  其中type说明:    浮点数 : DECIMAL     整数 : SIGNED    无符号整数 : UNSIGNED 。 当然,数字字符串可以直接用作数字来操作。例如select '1'+2 结果是 3.

 

show full processlist

用于查看当前数据库有哪些线程正在运行,可以看到一共有多少个连接数,哪些是正在查询,哪些是休眠状态。在遇到mysql出现性能问题,慢sql等问题时,可以及时的查询到问题sql,以及关闭线程。
如果有root权限,则可以查看所有主题。否则,只能看到自己的线程(即正在使用的MySQL帐户关联的线程)
原文链接:https://blog.csdn.net/u013419838/article/details/100145286

 

mysql如何修改数据库名

mysql数据库是无法直接rename的。下面三步,你来品尝。

create database if not exists new_demodb;

select concat('rename table demodb.`',table_name,'` to new_demodb.`',table_name,'`;') from information_schema.TABLES where TABLE_SCHEMA='demodb'

DROP DATABASE demodb;

 

 骚sql:select * from table1 where (col1,col2) in((v1,v2))

下面sql可以在mysql、Oracle、TiDB执行。

select *from PLAT_ORDER where
-- PRODUCT='YOUFU' and
-- CREATE_TIME<='2021-04-30' and
(id_card,amt) in(
('8CFCF8FB565C5CB74768571A13E26F453E52FFC4335A37F9BB5DF7708EEFEEF8',1100),
('258948B9D82CF27AABB5BD0918510EE1DA50DFE45724846E6A67EE282E7E6C70',50000),
('7B7C41800B30C5D5386CA5D7A615756F256EE90EC9894A8FEB338D80BF59D308',235000))


注意,在这个sql中,in后面是两层括号,即 in( (),() )。否则执行会有语法错误:
Error
(1241, 'Operand should contain 2 column(s)')


 

posted on 2019-07-30 17:10  buguge  阅读(178)  评论(0编辑  收藏  举报