MySQL 使用杂谈(一)

刚刚结束了一个以sql脚本为核心的项目(算是个项目吧^-^),有几点想总结的,嗯。。。


首先,我一开始对这件事情的定位有问题,我认为这是一个纯粹的sql脚本问题,但现在看来,或许有更好的执行结果,因为简单的sql脚本解决这个问题会变得很棘手。于是乎,我放弃了简单的sql脚本,转而向更为复杂的脚本寻求帮助。在经过一番调研后,我决定采用mysql的存储过程这一高级特性,但是,使用存储过程的时候不可避免的踩到了一个又一个坑,我觉得这篇博客叫做mysql踩坑记录或许更好。好,接下来我就来回顾一下这半周以来踩得这些坑吧。


存储过程使用:

1.为了保证sql编译器能够按照我们的需要执行,我们在创建procedure之前使用delimiter声明遇到哪个符号时执行程序,如delimiter //就是告知编译器遇到下一个//时执行脚本;

2.创建procedure之前需要 drop procedure if exists 过程名;

3.//置于该过程的end后;

4.创建成功后,调用语句为call过程名(),并声明delimiter结束(delimiter;)。

游标使用:

1.游标声明语句应位于除DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;语句后的所有其他声明语句之后;

2.使用游标时一般需要通过FETCH cur INTO 变量名;来赋值后使用;

3.游标要配合循环使用。

其他小知识:
1.concat()函数拼接字符串;

2.动态sql的使用,如下:

set @sqlString = 'select * frrom stu where name=\'fish\'';

prepare s from @sqlString;

execute s;

3.ifnull()函数的使用;

4.sum()函数的使用(与count()函数的区别);

5.case when语句的使用,case后可以有变量,也可以没有;

6.''中若有引号该使用转义字符\。

行转列与嵌套查询:

下列语句可实现行转列

                            select id,
                            max( case when course='数学' THEN
                                        score

                                     else

                                        0
                            END
                            ) as 数学,

                            max( case when course='语文' THEN
                                        score

                                     else

                                        0
                            END
                            ) as 语文

                            group by id

                            from stu;

嵌套查询示例:

                            select * from (

                            select id,
                            max( case when course='数学' THEN
                                        score

                                     else

                                        0
                            END
                            ) as 数学,

                            max( case when course='语文' THEN
                                        score

                                     else

                                        0
                            END
                            ) as 语文

                            group by id

                            from stu;

                            ) as t1 join stu_tech on stu.id=stu_tech.stuId;

好了,能想起来的就这些了,其他的在mysql系列后续博客中再讨论。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值