MySql
Posted 离落想AC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql相关的知识,希望对你有一定的参考价值。
mysql
MySql版本:MySQL 8.0
会话变量等基本操作的使用
① 使用查询结果给变量赋值。
mysql> set @sname=(select sname from student
-> where studentno=‘18135222201’);
mysql> select studentno, sname, birthdate
-> from student where sname=@sname;
②利用select语句将表中数据赋值给变量。
mysql> select @sname:=sname from student limit 5,1;
③利用select语句输出表达式。
mysql> select 1+7.5+3.4, ‘2018-01-20’+ interval 6 month;
④改变MySQL命令的结束标记。
mysql> delimiter $$
mysql> select studentno,sname,birthdate
-> from student where sname like ‘梅%’$$
mysql> delimiter ;
⑤利用预处理SQL语句输出course表中的前5行记录的部分数据。
mysql> set @a=5;
mysql> prepare STMT
-> from “select courseno,cname,type, period from course limit ?”;
mysql> execute STMT using @a;
自定义函数的创建和调用
①创建一个名为f_course的函数返回表course中的指定课程号的课程名。
mysql> delimiter &&
mysql> create function f_course(c_no varchar(6))
-> returns char(6)
-> begin
-> return (select cname from course
-> where courseno =c_no);
-> end &&
mysql> delimiter ;
②调用函数f_course。
mysql> select f_course(‘c05109’);
③查看指定函数f_course信息。
mysql> select * from information_schema.routines
-> where routine_name=‘f_course’;
④ 修改存储函数f_course的定义。将读写权限改为reads sql data,并加上注释信息"find function name"。
mysql> alter function f_course
-> reads sql data
-> comment ‘find function name’;
mysql> select SPECIFIC_NAME,SQL_DATA_ACCESS,
-> routine_comment from information_schema.Routines
-> where routine_name=‘f_course’;
⑤ 利用MySQL Workbench工具实现。创建、修改和删除函数都可以实现。
条件控制语句的应用
① 删除表course中指定课程号在score中的记录。
mysql> delimiter $$
mysql> create function delete_cno (c_no char(6))
-> returns char(6)
-> begin
-> declare c_name char(6);
-> select cname into c_name from course where courseno= c_no;
-> if c_name is null then
-> delete from score where courseno = c_no;
-> return ‘yes’;
-> else
-> return ‘no’;
-> end if;
-> end $$
mysql> delimiter ;
②创建函数ex_case,通过case语句首先判断传入参数的值是否为100,如果条件成立则输出1,如果条件不成立则再判断该传入参数的值是否为200,如果成立则输出2,如果条件不成立则再判断该传入参数的值是否为300,如果成立则输出3,当以上条件都不满足时输出0。
mysql> delimiter //
mysql> create function ex_case( x int)
-> returns int
-> begin
-> case x
-> when 100 then set x=1;
-> when 200 then set x=2;
-> when 300 then set x=3;
-> else set x=0;
-> end case;
-> return x;
-> end //
mysql> delimiter ;
mysql> select ex_case(127);
循环语句的应用
①定义函数ex_while,应用while语句求50~100的和。
mysql> delimiter //
mysql> create function ex_while(n int) returns int
-> begin
-> declare sum int default 0;
-> declare m int default 50;
-> while m < = n do
-> set sum=sum+m;
-> set m=m+1;
-> end while;
-> return sum;
-> end //
mysql> delimiter ;
mysql> select exam_while(100);
②定义函数ex_loop,应用loop语句求20~70之和。通过leave语句退出循环并输出结果。
mysql> delimiter//
mysql> create function exam_loop(n int) returns int
-> begin
-> declare sum int default 0;
-> declare m int default 20;
-> loop_label:loop
-> set sum=sum+m;
-> set m=m+1;
-> if m>n then
-> leave loop_label;
-> end if;
-> end loop;
-> return sum;
-> end //
mysql> delimiter;
mysql> select exam_loop(70);
存储过程的创建和使用
①创建存储过程p_student,从student表中检索出所有电话以135开头的学生的学号、姓名、出生日期和电话等信息。
mysql> delimiter //
mysql> create procedure p_student()
-> reads sql data
-> begin
-> select studentno,sname,birthdate ,phone
-> from student
-> where phone like ‘135%’ order by studentno ;
-> end //
mysql> delimiter ;
mysql> call p_student();
触发器的创建和应用
①创建一个触发器cno_trigger,当更改表course中某门课的课程号时,同时将score表课程号全部更新。
mysql> delimiter $$
mysql> create trigger cno_trigger after update
-> on course for each row
-> begin
-> update score set courseno=new.courseno
-> where courseno=old.courseno;
-> end $$
mysql> delimiter ;
#验证触发器cno_trigger的功能。
mysql> update course set courseno =‘c08106’
-> where courseno=‘c07123’;
mysql> select * from score where courseno =‘c08106’;
②创建一个触发器stu_trigger,当删除student表某个人的记录时,则删除score表相应的成绩记录。
mysql> delimiter $$
mysql> create trigger stu_trigger after delete
-> on student for each row
-> begin
-> delete from score where studentno=old.studentno;
-> end $$
mysql> delimiter ;
#验证触发器stu_trigger的功能。
mysql> delete from student
-> where studentno=‘19123567897’;
mysql> select * from score
-> where studentno=‘19123567897’;
③在teacher表中,定义一个触发器teach_trigger,当一个教师的信息被删除时,把该教师的编号和姓名添加到delete_teacher表中。
tips: 创建一个空表delete_teacher,表由teacherno和tname两列组成。
mysql> create table delete_teacher select teacherno,tname
-> from teacher where 1=0;
#创建teacher表的触发器
mysql> create trigger teach_trigger
-> after delete on teacher for each row
-> insert into delete_teacher(teacherno,tname)
-> values(old.teacherno, old.tname);
#验证触发器teach_trigger的功能。
mysql> delete from teacher where tname=‘常杉’;
mysql> select * from delete_teacher;
以上是关于MySql的主要内容,如果未能解决你的问题,请参考以下文章