Python书被同学借走了。这个礼拜记录下。mysql函数的学习和应用!//每周总结第三周

这个礼拜,研究了echarts 插件的使用。总的来说,插件不难受,但是后台的算法很复杂。

 然后学习了一种全新的sql语句的应用(自己孤陋寡闻)

比如说我想查询某一时间段内的东西

select * from table where YEAR(time)=2017 and MONTH(time)=10   #一条简单的查询,取得符合date类型其中时间为2017 ,月份为10月的数据,其中2017 / 10 两个变量为数字类型

通过简单的函数YEAR和MONTH就能提取出时间类型(time)的年和月,估计天,小时,分,秒也能!这里没细研究。

select  ifnull(num,0) from table  #一个简单的查询出来的null值默认为0,还记得oracle数据库中为nvl()。
seelct sex            
( case sex when 1 then "男"                 #case when then 语句,把符合你条件的语句,以你想要的格式显示出来,比之前的ifnull更加强大  
           when 2 then "女"
           else "人妖"
           end
) from table            

最近还尝试写了一下,mysql的触发器

CREATE TRIGGER tr_test            #字面上可能就能理解,在test1表执行更新之后,对test2表进行操作如sql语句。
AFTER UPDATE ON test1        #其中 TRIGGER为触发器关键词。还有更新前/后,插入前/后,删除前/后。大部分只是更改其关键词 after/before insert/update/delete
FOR EACH ROW                      #在说一个自己经历的小坑,对,触发器只能对另一张表进行操作。也就是说begin/end中的sql语句只能对另一张表进行操作。可能是防止无线循环
BEGIN                  #这里可能看到old.name 函数。显然就有new,old是指更新数据后,之前的数据,new就是更新的数据。这里比较抽象,各位可以慢慢尝试就懂了           
uppdate test2 SET name=new.name WHERE name=old.name;
END;

还有不怎么常用,但是能节省大量java段代码的存储过程,就是把java段的运算,写在mysql数据库段。

DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(IN type int)
BEGIN
if type=1 then                     #IN type int  代表传入一个参数tyep类型为int.
    set c=1;                       #这个存储过程自己老是写不好,不是逻辑不会,而是代码的格式老是报错。至今也是迷迷糊糊,半错半对的就蒙过去了
else if type=2 then                #其中参数问题,可以声明返回值,OUT  c int 声明返回一个c变量,类型为int 
    set c=2;                       
else 
    set c=3;
end if;
select c;
end
;;
DELIMITER ;

下面是调用实例

set @type=3;              #先声明参数数值为3,然后call存储过程,结果为3;
call test(@type);         #这是因为存储过程里面我自写了一个查询c的sql在里面,所以运行时会自己查询

如果我上面的存储过程没有select c 该怎么去过去c的值呢?

只需要把参数添加一个,OUT c int

调用实例

set @type=3;
call test(@type,@c);   因为自己知道@c是返回值,所以运行后,@c是已经有值的,这里直接查询就行了
select @c;

 

posted @ 2017-10-29 22:20  皇后  阅读(205)  评论(0编辑  收藏  举报