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的主要内容,如果未能解决你的问题,请参考以下文章

mysql 练习

MySQL--题库解析

MySQL习题

python基础练习。

mysql语句实战

7_mysql查询之where子句