• MySQL入门第三天(上)——函数与视图


    一、MySQL函数

      同样的,完整的函数可以参照开源中国的手册:http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh

      

      1.字符函数

      

        CONCAT

        实例:

      

      //这里别名和关键字冲突了,实际中也要注意这个问题

      

        CONCAT_WS

      它至少接收三个参数,第一个是分隔符,后面是要分隔的字符:

        实例:

      

        FROMAT

      用于格式化数字,例如保留几位小数(四舍五入)

        实例:

      

        LOWER  UPPER 

      大小写转换函数

        实例:

      

        LEFT  RIGHT

      获取左右侧字符,需要传入要转换的字符串和获取的位数

        实例:可以函数嵌套

      

        

        LENGTH

        实例:空格不能忽略

      

        LTRIM  RTRIM

      删除前后导空格,分别表示第一个字符之前的空格和最后一个字符的空格

        实例:

      

        TRIM

      删除空格或指定字符,完整方式:TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)

        实例:看实例即可一目了然:

      

        REPLACE

      字符替换,类似Java的字符替换,传入需要处理的字符串,要替换的旧字符(或字符串)和新字符

        实例:

      

        SUBSTRING

      字符串截取,和Java基本类似,不过下标是从1开始!传入需要处理的字符串,从第几位开始(1是首位),要截几位

        实例:

      

        LIKE

      模式匹配,和SQL的模糊查询有相似之处

        实例:

      

        但是如果%是记录中存在的字符,和通配符%是有混淆的

        比如查找名字中含有 % 的,就会存在问题(%%%是无法精确匹配的),我们可以使用转义字符,MySQL中:

        ESCAPE 就是自定义转义字符(这里就告诉MySQL,1是转义字符,后面的%当做普通字符处理,与类似)

       

      2.数值运算符和函数

       

        + - * / 不再赘述

        

        CEIL  FLOOR

      向上取整与向下取整,传入要处理的数值即可

        实例:

      

        DIV

      整数相除

        实例:

      

        MOD

      取模运算,整数或者小数均可以

        实例:

      

        POWER

      幂运算,传入底数和指数

        实例:

      

        ROUND

      四舍五入函数,传入需要操作的数和保留的位数

        实例:

      

        TRUNCATE

      数字截断函数,不进行四四舍五入,强行截断,传入要操作的数和要截断到小数点后几位

        实例:

      

      3.比较运算符和函数

      

        BETWEEN...AND

      是一个闭区间,和前面一样,返回1表示真,0表示假

        实例:(NOT相似)

      

        IN

      是否在给定的集合内

        实例:

      

        IS NULL

      是否为空或非空

      

      4.日期时间函数

      

        NOW

      打印当前日期时间

        实例:

      

        CURDATE  CURTIME

      当前日期与当前时间

        实例:

      

        DATE_ADD

      日期的变更函数,不仅仅是增加,变更的时间参数被INTERVAL格式激活后便可以使用各种单位,传入需要变更的日期和变更的时间长度

        实例:

      

        DATEDIFF

      日期差值计算函数,传入两个要计算差值的日期即可。

        实例:

      

        DATE_FORMAT

      日期格式转换函数,详细的参数介绍可参见开源中国MySQL文档

      

      5.信息函数

      

        CONNECTION_ID

      得到连接的ID,也就是线程的ID

        实例:

      

        DATABASE

      得到当前打开的数据库

        实例:

      

        LAST_INSERT_ID

      返回最后一次插入记录的主键(只有自增主键时生效),插入多条情况时等更多信息可以参见:http://blog.csdn.net/slvher/article/details/42298355

        实例:

      

         USER  VERSION

      当前用户和数据库版本信息

        实例:

      

       6.聚合函数

        SQL2标准规定聚合函数将会忽略NULL值

          如果字段中所有数据都为NULL,那么COUNT()返回0,其他返回NULL

         当然,聚合函数也支持统计的去重操作:

    COUNTDISTINCT id)

        当然,这里指出COUNT(字段)是统计字段的非NULL记录数,而COUNT(*)只是简单的统计记录数

        AVG

      

        COUNT

      

        //有点尴尬,前面少写了一个 g 一直将错就错错到现在

        MAX  MIN  SUM

      

       7.加密函数

      

      MD5

      返回加密后的MD5字符串

      

     二、自定义函数(UDF)

      1.简介

      

      

    创建自定义函数: 注意,函数必须有返回值,如果要无返回值的,应该创建‘存储过程’(函数返回值只能有一个,存储过程可以没有或多个(通过select),而且存储过程可以通过out为变量赋值,而函数不行)
                      函数的参数最好和表的字段名字不一样,如果相同的话,在使用时,应该用表名.字段名进行区分
    CREATE FUNCTION 函数名(参数名1 类型1,参数名2 类型2,....)
    [DEFINER = {user|CURRENT_USER}]//定义时的用户,若是不写就默认为当前用户   
       2.语法
      

      注意事项:

      

      3.创建无参函数

       以改造NOW()函数为实例:(返回值可以是任意MySQL支持的数据类型)
      

        换成非中文是正常的:(待解决 FIXME)

      

      4.创建有参函数

     

      5.创建复合结构函数

      以用户表为例:

      

      需求是创建一个函数,完成插入记录,并返回id值,按照之前的写法:

      

      发现是报错的,因为MySQL认为分号 ; 是分隔符,此时命令结束,根本没有SMALLINT

      这个时候我们使用 DELIMITER 重新定义分隔符,这样,语句结束就变为 // 结束语句了

      需要使用Delimiter 修改MySQL的结束符,使用Begin....End将复杂函数括起来,相当于程序中的大括号{},有返回值的话,使用Return返回

      

        函数定义:

      

      后面记得把DELIMITER改回来

      

      6.删除函数

      

       更多详细的函数介绍(循环流程控制等),请参见:http://www.cnblogs.com/caoruiy/p/4485273.html

    三、视图

      视图是查询结果形成的虚拟表(派生表)

      示例:

    # 在CREATE VIEW后指定别名
    CREATE VIEW REP_INFO(name,num) AS
        SELECT rep_name,COUNT(*) FROM rep

      可更新视图的SQL标准:

      

      定义与介绍参见http://www.cnblogs.com/zzwlovegfj/archive/2012/06/23/2559596.html

      视图基本操作请参见http://www.cnblogs.com/4php/p/4108157.html

       两个实例参见http://www.cnblogs.com/chenpi/p/5133648.html#_label0

  • 相关阅读:
    linux下apache(httpd)安装部署
    基于redis分布式缓存实现(新浪微博案例)
    python--字典
    django(四)
    django(三)
    django(二)
    django(一)
    053(八十)
    053(七十九)
    053(七十八)
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7396501.html
Copyright © 2020-2023  润新知