数据库学习笔记触发器和常用函数

来源:互联网 发布:域名模糊查询 编辑:程序博客网 时间:2024/06/12 18:13

  • 触发器:是一个特殊的存储过程,不需要通过call调用,不需要手动启动,只要当预定义的事件发生的时候会自动调用。
    格式:
create trigger trigger_name trigger_time trigger_event on table_name for each row tirgger_body//trigger_name:触发器名称//trigger_time:brfore/after,表示在事件之前或之后触发//trigger_event:insert|update|delete,触发该触发器的具体事件//table_name:该触发器所作用的表//trigger_body:当触发器被激活时执行的语句,如果执行多条语句,则用begin....end复合语句结构.//注意:对于相同触发程序动作时间和事件给定表,不能有2个触发程序

example:
创建一个简单的触发器

//创建学生信息表create table student_info(stu_no int not null auto_increnemt,stu_name varchar(20) default null,primary key(stu_no))default charset=utf8;//学生总数表create table student_count{student_count int default 0)default charset=utf8;//创建一个触发器,当插入一个新的学生时,数量自动加1create trigger trigger_student_count_insertafter inserton stu_info for each rowupdate stu_count set student_count=student_count+1;//当删除一个学生时数量自动减一create trigger trigger_student_count_deleteafter deleteon stu_info for each rowupdate stu_count set student_count=student_count-1;//创建之前需要在stu_count表中插入一个数据insert into stu_count values(0);//复合语句create tigger trigger_name trigger_time trigger_event on table_name begin bodyend$$exmaple:create table stu_info1(stu_no int not null primary key auto_increment,stu_name varchar(30) default null,stu_class int)default charset=utf8;create table stu_count1(student_count int default 0,student_class int default 0)default charset=utf9;//0->全年级学生 其他数据表示年级的学生数量//创建触发器after insert//NEW.stu_class:取得正在插入的学生信息中的年级的值delimiter $$create trigger trigger_student_count_insert after insert on stu_info1 for each rowbeginupdate stu_count1 set student_count=student_count+1 where student_class=0;update stu_count1 set student_count=student_count+1 where student_class=NEW.stu_class;end$$//删除触发器delimiter $$create trigger trigger_student_count_delete after delete on stu_info1 for each rowbeginupdate stu_count1 set student_count=student_count-1 where student_class=0;update stu_count1 set student_count=student_count-1 where student_class=OLO.stu_class;end$$//查看触发器show triggers;//删除触发器drop trigger trigger_name;
  • mysql函数
  • 包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数等
//绝对值函数 select abs(x); //返回圆周率 select pi(); //求x的平方根 select sqrt(x); //x对y求余 select mod(x,y); //返回0-1之间的随机数 select rand(); //返回离x最近的整数(四舍五入) select round(x); //返回x保留小数点后y位的值,对最后的值四舍五入 select round(x,y); //返回x的符号(-1,0,1) select sign(x); //求x的y次幂 select pow(x,y)/power(x,y); //e的y次幂 e^y select exp(y); //计算x的自然对数 select log(x); //计算以10为底的y的对数 select log10(y);
  • 字符串函数
 字符串函数:char_length(s):计算字符串s的字符数。length(s);concat(s1,s2,...):将多个字符串合并成一个字符串concat_ws(x,s1,s2,...):将s1,s2等多个字符串合并成一个字符串,各字符串用x隔开upper(s)/ucase(s):将字符串s的所有字母变成大写字母;例: select upper("asd"),ucase("asd");lower(s)/lcase(s):将字符串s的所有字母变成小写例:select lower("ASD"),lcase("ASD");repeat(s,n):将字符串s重复n次例:select repeat("xxx_",3);strcmp(s1,s2):比较字符串s1和s2s1>s2 ,返回1. 如果s1==s2 返回0;如果s1<s2,返回-1substring(s,n,len)/mid(s,n,len):从字符串s的第n个位置开始获取长度为len的字符串。例:select substring("qwertyuidfgh",3,5),mid("zxcvbnghjk",3,5);reverse(s):将字符串s的顺序反过来例:select reverse("big");日期和时间函数:curdate()/current_date();获取当前日期curtime()/current_time():获取当前时间例:select curdate(),current_date(),curtime(),current_time();now()/current_timestamp()/localtime()/sysdate():获取当前的日期和时间例:select now(),current_timestamp(),localtime(),sysdate();条件判断函数:if(expr,v1,v2):如果表达式expr成立,返回结果v1,否则,返回结果v2.例:select code,name,if(score>=90,"good","so-so") from student3;ifnull(v1,v2):如果v1不为空,就显示v1的值,否则就显示v2的值select code,ifnull(score,"no score") from student3;version:返回数据库的版本号。database():返回当前数据库名加密函数:password(str):函数对字符串str进行加密。一般情况下password(str)函数主要用来给用户密码加密例:select password('abcd'); select md5("acdef");decode(crypt_str,pswd_str):可以使用字符串pswd_str来为crypt_str解密。crypt_str是通过encode(str,pswd_str)加密后的而进制数据。字符串pswd_str是相同的例:select decode(encode('abcd','aa'),'aa');自定义函数语法:create function function_name(参数列表)returns 返回值类型func_body注;1.返回值类型,一定要有return语句2.关于函数体  函数体是由合法的sql语句组成  如果是复合语句则使用begin...end语句  复合结构可以包含声明,循环,判断等控制结构    delimiter $$create function addUser(username varchar(20),userage int)returns intbegininsert into stu(name,age) values(username,userage);return (select max(age) from stu);end$$  mysql>delimiter ;mysql>select addUser("awayken",26);查看自定义函数:show function status;删除函数的语句:drop function function_name;    流控制结构:1.if语句格式:if condition1  then statement1    [elseif  condition then statement] ...      [else statement]end if注:如果condition1为真,则执行statement1.否则,可以继续往下判断或执行else对应的语句。2.case语句case case_value        when  when_value then  statement        [when  when_value then  statement]        [else statement]end case3.while语句while condition do    statementend whilecreate function dowhile()returns intbegin    declare v1 int default 5    while v1>0 do        set v1=v1-1;     end while;return v1;end;