sql编程&&存储过程
时间:2025-05-27 12:30 文章来源于网友投稿,仅供参考!
sql编程&&存储过程 sql结构化查询语言 是一种编程语言用于管理数据库的编程语言 元素: 数据 数据类型 变量的数据类型就是字段的数据类型 变量 字段名就是变量 自定义变量 为了区分用户变量和系统变量 需要在用户变量前增加 @ 标志 set变量名 = 变量值 set 是专门给变量赋值的语句set@who = 'gwyy'; 查看自定义变量select @who;set@a = (select count(*) from t1); 甚至给set赋值语句都可以是一条sql语句select into 方法注入变量select 字段列表表达式 into变量列表select19,29,39 into@a,@b,@c;把3个数字注入到3个变量里面select name from t1 where id = 1 into @d; 把查询结果注入到变量里面selectinto var 要求只能返回一个记录select 方式给变量赋值select @a := 'gwyy'; 也可以这么写set @a := 'gwyy'; 变量有效期 会话结束就消失 连接结束 作用域用户定义的是全局的函数内可用作用于是重叠的但是mysql也存在局部作用域变量 在函数内部定义 的 函数 内置函数 数值函数Abs(X),绝对值abs(-10.9) = 10Format(X,D),格式化千分位数值 format(1234567.456, 2) = 1,234,567.46Ceil(X),向上取整ceil(10.1) = 11Floor(X),向下取整floor (10.1) = 10Round(X),四舍五入去整Mod(M,N) M%N M MOD N求余10%3=1Pi(),获得圆周率Pow(M,N) M^NSqrt(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_strINSTR (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个0LTRIM (string ) //去除前端空格REPEAT (string ,count )//重复count次RPAD (string ,length ,pad)//在str后用pad补充,直到长度为lengthRTRIM (string )//去除后端空格STRCMP (string1 ,string2 )//逐字符比较两字串大小流程函数:CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 多分支IF(expr1,expr2,expr3)双分支, 用户自定义函数 函数名 参数列表 函数体 返回值 语法: 新建: Create function function_name (参数列表) returns 返回值类型 函数体 函数名,应该合法的标识符,并且不应该与已有的关键字冲突。 一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。 参数部分,由参数名和参数类型组成。 返回值类类型 函数体由多条可用的mysql语句,流程控制,变量声明等语句构成。 多条语句应该使用 begin end语句块包含。 注意,一定要有return 返回值语句。 函数参数 参数 同样需要确定类型 可以有多个参数 函数内部定义局部变量declare iint default 0;删除:Drop function if exists function_name;查看:Show function status like ‘partten’Show create function function_name;修改:Alter function function_name 函数选项,《sql编程&&存储过程》()。DEMO最简单的函数 输出 hello worlddelimiter $$createfunction sayhello() returns varchar(20)beginreturn 'hello world';end$$delimiter ;稍微复杂的 算出现在是不是晚上delimiter $$createfunction fun1() returns varchar(20)begin--hour 可以获得当前时间的小时部分ifhour(now()) >=18 thenreturn '晚安';elsereturn'早';end if;end$$delimiter ; 测试循环delimiter $$drop function if existsfun2$$createfunction fun2() returns varchar(20)begin set @i = 1;set @num = 0; w:while @i<=10 doif @i =5 then -- 如果循环到了5就退出整个循环-- set @i = @i+1;leavew;end if;set @i = @i+1;set @num = @num + @i;end whilew;return @num;end$$delimiter ;带参数的delimiter $$drop function if exists sayhello$$createfunction sayhello(name varchar(10)) returns varchar(20)beginreturnconcat( 'hello',name);end$$delimiter ;学号函数delimiter $$drop function if exists sayhello$$createfunction sno(c_idint) returns char(20)begindeclare s_no char(10);declareclass_name char(10);select stu_no fromjoin_student where chass_id = c_idinto s_noifisnull(s_no) then--没有学生 返回001select c_name from join_class where id = c_id into class_name ;returnconcat(class_name,'001');else --有的话 最大值+1returnconcat(class_name, lpad(right(s_no,3) +1 ,3,'0'));end if;end$$delimiter ; 控制流程 分支 if 条件1 then 条件1满足语句 else if条件2 then 条件2满足的语句 else 都不满足的语句 End if; 循环 while条件do 循环体 循环的提前终止 break相当于 mysql里面的leave退出整个循环 continue没有 但是有 iterate退出当前循环 注意 不是根据 leave 和 iterate 的位置来跳出的 而是根据循环标签来跳出的 给循环起个名字: 标签 : while end while 标签 运算符 算数运算符+ - * / 逻辑运算符andornot! 关系运算符 > < >= <=== != = === 注释 行注释#--块注释/*xxx*/ 结束符 默认是; 也可以是 \g也可以是 \G当然 ;和\g是一样的\G是分组显示\g和\G是命令行独有的 除此之外 我们还可以用 delimiter 来修改语句结束符delimiter$$ 存储过程 存储过程 类似于一个函数就是把一段sql 语句 封装成一个整体 当要使用的时候 可以调用这个存储过程来实现 在封装的语句体里面 可以用 ifelsecase while等控制结构 列也可以当成变量来看所以 存储过程 可以当成一个程序来看可以进行 sql编程 查看现有的存储过程Show procedurestatus;删除存储过程Drop procedure存储过程名称;写一个存储过程Createprocedure p1()BeginSelect * from g;End$调用存储过程 Call p1(); 存储过程和函数的区别一个名字不同 一个 没有return其他都一样 |
上一篇:Oracle数据库表空间容量调整(表空间缩容脚本)脚本