mysql存储过程学习笔记(1)

最近由于测试的需求,需要往数据库中插入大量的模拟数据,组织要求使用存储过程,所以这两天一直在看这个,下面把这两天的学习心得给大家分享下

1.      创建自己的第一个procedure (空的,不能完成任何操作)

CREATEPROCEDURE `NewProcedure`(`Param` int(11))

BEGIN

END;

2.      区块定义

1)  常用:

    BEGIN

    END;

2)  也可以给区块起别名,如:

    myLable:BEGIN

    END myLable;

      注意:可以使用leave myLable跳出区块,执行区块以后的代码

3)  条件语句:

    If 条件 then

    Statement1

    Else

    Statement2

    End if;

解析:如果条件成立,那么statement1;否则执行statement2,显示声明条件语句结束。

4)  循环语句

A.     While语句

    [label:] while expression do

    Statements

    End while[label];

解析:当 expression条件成立时,do statements;显示声明while语句结束。

B.     Loop循环

    [label:]Loop

    Statements

    End Loop[label];

解析:循环 statements ,到结束循环。(没看懂在什么情况下可以结束)

C.     Repeat until循环

    [label:]REPEAT

    Statements

    UNTIL expression

    END REPEAT [label];

解析:重复statements ,直到expression成立,结束循环repeat.

5)  其他命令

1)  调用存储过程

call sp_name()

注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

2)  删除存储过程

drop procedure sp_name

注意:不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

3)  查看存储过程的信息

show procedure status

显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

show create procedure sp_name

显示某一个存储过程的详细信息

3.      操作符

1)  算数操作符

+ - * / div %

解析:div表示整除;/不表示整除,如果有余数也会显示出来

2)  比较运算符

>,

<,

<=,

>=,

BETWEEN : EX: 5 BETWEEN 1 AND 10 àtrue

NOT BETWEEN ,EX: 5 not between 1 and10 àfalse

IN 在集合中 5 in(1,2,3,4) àfalse

NOT IN

=    //表示等于(不表示赋值;如果要表示赋值,要加上set 关键字)

<>,!=   //表示不等于

<=>  严格比较两个null值是否相等 null<==>null àtrue

LIKE 简单模式匹配 “guy Harrison”like “guy%” àtrue

REGEXP 正则式匹配 “guy Harrison”regexp “[gg]reg”àfalse

IS NULL 为空 ex: 0 isnull àfalse

IS NOT NULL 不为空 ex: 0 isnot null àtrue

 

3)  逻辑运算符

AND , OR ,XOR(异或),

4)  位运算符

|,&,<<,>>,~(按位取反)

4.      Mysql存储过程基本函数(有些没有写注释,如果不理解的话,可以baidu下)

1)  字符串类

Charset(str)

Concat(string2[,…])//连接字符串

Instr(string,substring)//返回substring首次在string中出现的位置,不存在返回零

Lcase(string2)//转小写

Left(string2,lengh)//从string2中的左边起取length个字符

Length(stirng)

Load_file(file_name)//从文件读取内容

Locate(substring,string[,start_position])//同instr,但可指定开始位置

Ltrim(stirng2)//去除前端空格

Repeat(string2,count)//重复count次

Replace(str,search_str,replace_str)//在str中用replace_str替换search_str

Rpad(string2,length,pad)//在str后用pad补充,直到长度为length

Rtrim(string2)//去除后端空格

Strcmp(string1,string2)//逐字符比较两字符串大小

Substring(str,position [,length])//从str的position开始,取length个字符

Ucase(string2)//转换成大写

Right(string2,length)//取string2最后length个字符。

Space(count)//生成count个空格

Trim([[both|leading|trailing][padding]from]string2)//去除指定位置的指定字符。

注意:mysql中字符串的脚标是从1开始的。

2)  数字类

ABS(number2)//绝对值

Bin(deaimal_number)//十进制转二进制

Ceiling(number2)//向上取整

Conv(number2,from_base,to_base)//进制转换

Floor(number2)//向下取整

Format(number2,decimal_places)//保留小数位数

Hex(decimalNumber)//转16进制

注意:hex()可传入字符串,则返回asc-11码,

Last(number,number2[,…])//求最小值

Mod(numerator,denominator)//求余

Power(number,power)//求指数

Rand([seed])//随机数

Round(number[,decimals])//四舍五入,decimals为小数位数;如果不写decimal,则表示保留0位小数位。

Sign(number2)//返回符号,正负或0

Sqrt(number2)//开平方

3)  日期类

Addtime(date2,time_interval)//将time_interval加到date2

Convert_tz(datetime2,fromTZ,toTZ)//转换时区

Current_date()//当前日期

Current_time()//当前时间

Current_timestamp()//当前时间戳

Date(datetime)//返回datetime的日期部分

Date_add(date2,interval d_valued_type)//在date2中加上日期或时间

Date_format(datetime,formatCodes)//使用formatcodes格式显示datetime

Date_sub(date2,interval d_valued_type)//date2上减去一个时间

Datediff(date1,date2)//两个日期差

Day(date)//返回日期的天

Dayname(date)//英文日期

Dayofweek(date)//星期(1-7),7为星期天

Dayofyear(date)//一年中的第几天

Extract(interval_name from date)//从date中起初日期的指定部分。

Makedate(year,day)//给出年及年中的第几天,生成日期串

Maketime(hour,minute,seond)//生成时间串

Monthname(date)//英文月份名

Now()//当前时间

Sec_to_time(seconds)//秒数转成时间,以format格式显示

Timediff(datetime1,datetime2)//两个时间差

Time_to_sec(time)//时间转秒数

Week(date_time [,start_of_week])//第几周

Year(datetime)//年份

Dayofmonth(datetime)//月的第几天

Hour(datetime)//小时

Last_day(date)//date的月的最后日期

Microsecond(datetime)//月

Minute(datetime)//分

附:可用在INTERVAL中的类型
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE,MINUTE_SECOND,MONTH ,SECOND ,YEAR 

5.      在java中调用存储过程的方法(没有试验过,先摘录下来)

Connection connection = DriverManager.getConnection(url,username,password);  

· String procedure = “{  = call myProc(,)}”;  

· CallableStatement statement = connection.prepareCall(procedure);  

·  statement.setString(2,×××);  

· statement.setFloat(3,×××);   

· statement.registerOutParameter(1,Types.INTEGER);   

· statement.execute();   

· int row = statement.getInt(1);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值