mysql常用方法 总结:
---limit---
1、当 limit后面跟一个参数的时候,该参数表示要取的数据的数量
例如 select* from user limit 3 表示直接取前三条数据
2、当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量,例如
select * from user limit 1,3;
3、当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。
例如select * from user limit 3 offset 1;表示跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据
LIMIT 有一个参数和两个参数的情况:一个参数表示限制返回记录的条数,两个参数,第一个表示数据偏移量,第二个表示返回记录的条数
----日期比较----
select * from table_name where date(start_time) between '2022-03-21' and '2022-03-22'
2. 时间比较
SELECT * FROM table_name WHERE start_time <= '2022-03-22 00:00:00' and start_time >= '2022-03-21 00:00:00'
select sysdate() + interval 1 day ,now();
now()返回一个常量,语句开始时候的值,sysdate()返回当前时间,执行时的时间;
日期筛选: date_add(sysdate(),interval -1 month) / date_add(now(),interval -1 day) ;
-----case用法-----
case key
when 条件 then '结果'
when 条件 then '结果'
when 条件 then '结果'
else '结果'
end
----if 用法----
if(expr1,expr2,expr3)
expr1为条件返回一个bool值,成立则返回expr2,否则返回 expr3
例如:
if(sex=0,'男','女')
类似于C# 三元表达式 expr1==true?"true":"false"
--创建临时表 --
create temporary table -tableName as (select * from xxx);
drop temporary table if exists -tableName;
-- 链接字符串--
相当于 string.join(",",arr)
select GROUP_CONCAT(a.Name separator ',') as PartsName from tableName
.cast(Id as char) as id 转换字段类型。
.concat('a','b','c') 拼接字符串print abc 。
.GROUP_CONCAT(a.Name separator ',') 分组后的组合,指定分割符号的。
-- 存储过程 --
drop procedure if exists my_procedure; -- 删除存储过程,清空环境
delimiter // -- 执行相当于 ;
create procedure my_procedure (time datetime) -- 创建存储过程,相当于函数,参数+类型
begin -- 开启一个事务
select * from `log`; -- 具体逻辑
end -- 事务结束
call my_procedure(now());-- 调用存储过程,并传递参数
drop procedure if exists my_procedure; -- 删除存储过程,如果是临时的话需要删除
-- 事务 trancaction
begin 或者 START TRANSACTION 开启事务 end , rollback 回滚;
----join----
left join on and还是会查出来左表所有的值,对左表的筛选没用 ,对右表筛选才有用
and放到 where后 是进行最后的过滤
left join中关于where和on条件的几个知识点:
多表left join是会生成一张临时表,并返回给用户
where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记录
on条件是对left join的右表进行条件过滤,但依然返回左表的所有行,右表中没有的补为NULL
on条件中如果有对左表的限制条件,无论条件真假,依然返回左表的所有行,但是会影响右表的匹配值。也就是说on中左表的限制条件只影响右表的匹配内容,不影响返回行数。
1.对左表添加条件限制需在where条件中添加,不能放到on后面
2.对右表添加条件限制需放到on后面,在where条件中添加会有数据行数差异出现问题。
left join 会查出左表所有的数据
on 后面的and条件会影响到右表相关行的数据展示,筛选右表,但不影响两表交际的数据行数
WHERE 后面的条件会对两表的交集进行再次筛选
如果想要展示左表的所有行则用left join B_Table on and 处理B表的数据展示
如果要少选最终的数据,条件需要放到where后面
datediff(date1.date2); 相差的天数
TIMESTAMPDIFF(时间单位,date1,date2);其中时间单位可以精确到天(DAY)、小时(HOUR),分钟(MINUTE)和秒(SECOND)
null 值和 空字符串和 0 都不相同,null 只有两种操作 is null, is not null
无法比较null和0 他们是不等价的.
group by 配合使用 聚合函数 count(条件 要加上 or null) 不然不起作用,加上or null 后不符合条件的数量均为0;
查看表结构和备注 show full columns from vacuummaterial;
添加索引 ALTER TABLE user ADD INDEX name_index(name);
查看索引 SHOW INDEX FROM
CREATE INDEX t_device_prop_UI_name_IDX USING BTREE ON smooremeshmdata.t_device_prop (UI_name);
-- function
-- 1.function的创建语法
create function 函数名([参数列表]) returns 数据类型
begin
sql语句;
return 值;
end;
-- 调用
select 函数名();
-- 例子:
CREATE FUNCTION test.func_getsum(n int)
RETURNS INT
BEGIN
declare total int default 0;
while n>0 do
set total:=total+n;
set n:=n-1;
end while;
return total;
END
select func_getsum(10); -- 返回55
-- 存储过程
-- 语法:
-- 1、创建存储过程
create procedure 存储过程名称(in/out/inout 参数名 参数类型(长度))
begin
SQL语句;
end;
-- 说明:
-- in:该类型参数作为输入,也就是需要调用时传入值
-- out:该类型参数作为输出,也就是该参数可以作为返回值
-- inout:既可以作为输入参数,也可以作为输出参数
-- 参数类型长度:不指定长度时mysql会默认一个长度,如int会默认int(11),为什么是11,因为int的有符号类型的最大长度就是-2147483648,是11位的。
-- 例子:
CREATE PROCEDURE test.GetSum(in n int)
BEGIN
declare total int default 0;
while n>0 do
set total:=total+n;
set n:=n-1;
end while;
SELECT total;
END
-- 执行的话要用
CALL test.GetSum(10);
-- 触发器 trigger 可以在某个表的增删改操作动作前后执行下一个动作, insert update delete ,before after
-- 例子:
-- 新增触发器
CREATE DEFINER=`root`@`%` TRIGGER trigger1
AFTER INSERT
ON Test_Cap01 FOR EACH ROW
INSERT INTO test.Sys_Logs
(ID, Logger, `Level`, Url, Host, `Method`, UserAgent, Cookie, QueryString, Body, Message, Elapsed, CreateTime, IPAddress)
VALUES(uuid(), '触发器', '', '', '', '', '', '', '', concat('Test_Cap01新增一条数据->',new.ID), '', 0, now(), '')
-- 更新触发器
CREATE DEFINER=`root`@`%` TRIGGER trigger_update
AFTER UPDATE
ON Test_Cap01 FOR EACH ROW
INSERT INTO test.Sys_Logs
(ID, Logger, `Level`, Url, Host, `Method`, UserAgent, Cookie, QueryString, Body, Message, Elapsed, CreateTime, IPAddress)
VALUES(uuid(), '触发器', '', '', '', '', '', '', '', concat('Test_Cap01更新一条数据旧数据:',old.ID,'新数据:',new.ID), '', 0, now(), '')
-- 查看触发器
show triggers;