sql编程&&存储过程(一)

2014-11-24 12:13:04 · 作者: · 浏览: 0
sql 编程&&存储过程
sql 结构化查询语言
是一种编程语言 用于管理 数据库的编程语言
元素:
数据
数据类型
变量的数据类型 就是字段的数据类型
变量
字段名就是变量
自定义变量
为了区分用户变量和系统变量 需要在用户变量前增加 @ 标志
 set  变量名 = 变量值   set 是专门给变量赋值的语句
    set  @who = 'gwyy';     查看自定义变量  select @who;
    set  @a = (select count(*) from t1);   甚至给set赋值语句都可以是一条sql语句    
    select into 方法注入变量
    select 字段列表  表达式   into  变量列表
    select  19,29,39 into  @a,@b,@c;    把3个数字注入到3个变量里面
    select name from t1 where id = 1 into @d;   把查询结果注入到变量里面
    select  into var 要求只能返回一个记录
    select 方式给变量赋值
    select   @a := 'gwyy';   也可以这么写  set @a := 'gwyy';

变量有效期
会话结束就消失 连接结束
作用域 用户定义的是全局的 函数内可用 作用于是重叠的 但是 mysql也存在局部作用域变量 在函数内部定义 的
函数
内置函数
数值函数
Abs(X),绝对值abs(-10.9) = 10
Format(X,D),格式化千分位数值 format(1234567.456, 2) = 1,234,567.46
Ceil(X),向上取整ceil(10.1) = 11
Floor(X),向下取整floor (10.1) = 10
Round(X),四舍五入去整
Mod(M,N) M%N M MOD N求余10%3=1
Pi(),获得圆周率
Pow(M,N) M^N
Sqrt(X),算术平方根
Rand(),随机数  select floor(rand() *5 +5);
TRUNCATE(X,D) 截取D位小数
时间日期函数
Now(),current_timestamp(); 当前日期时间
Current_date();当前日期
current_time();当前时间
Date(‘yyyy-mm-dd HH;ii:ss’);获取日期部分
Time(‘yyyy-mm-dd HH;ii:ss’);获取时间部分
Date_format(‘yyyy-mm-dd HH;ii:ss’,’ %D %y %a %d %m %b %j');
Unix_timestamp();获得unix时间戳
From_unixtime();//从时间戳获得时间
字符串函数
LENGTH (string )  //string长度,字节
CHAR_LENGTH(string)   //string的字符个数
SUBSTRING (str, position [,length ])   //从str的position开始,取length个字符
REPLACE (str,search_str ,replace_str )   //在str中用replace_str替换search_str
INSTR (string ,substring )  //返回substring首次在string中出现的位置
CONCAT (string [,... ])  //连接字串
CHARSET(str)  //返回字串字符集
LCASE (string ) //转换成小写
LEFT (string ,length )  //从string2中的左边起取length个字符
LOAD_FILE (file_name)   //从文件读取内容
LOCATE (substring , string [,start_position] )   //同INSTR,但可指定开始位置
LPAD (string ,length ,pad )  //重复用pad加在string开头,直到字串长度为length lpad(1,3,0)  在1前面补3个0
LTRIM (string ) //去除前端空格
REPEAT (string ,count )  //重复count次
RPAD (string ,length ,pad)  //在str后用pad补充,直到长度为length
RTRIM (string )  //去除后端空格
STRCMP (string1 ,string2 )  //逐字符比较两字串大小
流程函数:
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END   多分支
IF(expr1,expr2,expr3)  双分支。
聚合函数
Count()
Sum();
Max();
Min();
Avg();
Group_concat()
其他常用函数
Md5();
Default();

用户自定义函数
函数名
参数列表
函数体
返回值
语法:
新建:
Create function function_name (参数列表) returns 返回值类型

函数体
函数名,应该合法的标识符,并且不应该与已有的关键字冲突。
一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。
参数部分,由参数名和参数类型组成。
返回值类类型
函数体由多条可用的mysql语句,流程控制,变量声明等语句构成。
多条语句应该使用 begin end语句块包含。
注意,一定要有return 返回值语句。
函数参数
参数 同样需要确定类型
可以有多个参数
函数内部定义局部变量
declare i  int default 0;


删除:
Drop function if exists function_name;
查看:
Show function status like ‘partten’
Show create function function_name;
修改:
Alter function function_name 函数选项。

DEMO

最简单的函数 输出 hello world
delimiter $$
  create  function sayhello() returns varchar(20)
    begin
        return 'hello world';
    end
$$
delimiter ;
稍微复杂的 算出现在是不是晚上
delimiter $$
  create  function fun1() returns varchar(20)
    begin
        --  hour 可以获得当前时间的小时部分
        if  hour(now()) >=18 then
          return   '晚安';
        else
        return  '早';
        end if;
    end
$$
delimiter ;

测试循环
delimiter $$
drop function if exists  f