mysql视图存储_Mysql 视图、存储过程以及权限控制

导读:

该文章为视图、存储过程、用户权限练习;

如果有不对的地方欢迎指出与补充;

该基础练习基于MySQL5.0以上;

语句格式:

1. 视图格式:

create view view_name[列名,列名.....] as select 子查询 with check option

其中with check option 作用是:在视图进行update\delete\insert操作时要保证更新、插入、删除的行满足视图定义中的谓词公式(既子查询中的条件表达式);

视图操作如正常表一样可以增删改查。

2.存储过程格式:

create procedure pro_name(in 参数名 类型,out 参数名 类别)

begin

过程体

end

3.用户权限格式:

create user 用户名 indentified by '密码'

--设置权限

grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";

视图:

(1)建立视图IS_STUDENT,视图中包含信息系全体学生的基本信息。(要求限制更新)

Create view IS_STUDENT as select * from student

Where sdept=’信息系’ with check option;

(2)建立视图CJ_STUDENT,视图中包含所有成绩不及格的学生的学号,姓名,课程名,成绩。

Create view CJ_STUDENT as select student.sno,sname,cname,grade from student,sc,course

Where student.sno=sc.sno and sc.cno=course.cno and (grade <60 or grade is null);

(3)建立视图AVG_CJ,视图包括学生的学号以及他们的平均成绩,按成绩降序排列。

Create view AVG_CJ as select sno ,avg(grade)

from sc where grade is null group by sno order by avg(grade) desc;

(4)根据视图IS_STUDENT,修改该视图中年龄都增加1。观察基本表Student中相应的哪些数据发生了变化。

Update IS_STUDENT set sage=sage+1;

select * from IS_STUDENT;

(5)在视图IS_STUDENT中插入新的记录,学号为9531103,姓名为张玉,女,21岁,计算机系。(是否能执行?若不行,为什么?)

insert into IS_STUDENT values('9531103','张玉','女',21,'计算机系');

不能执行,因为,违反了视图创建规则,计算机系不满足sdept中的信息系要求;

(6)根据视图CJ_STUDENT创建视图CJ_TJ,包含课程名,不及格人数,不及格人姓名列表,按照不及格人数降序排列。

Create view CJ_TJ as select cname,count(*),GROUP_CONSCAT(sname SEPARATOR ',') from CJ_STUDENT group by cname order by count(*) desc;

存储过程:

(1)建立存储过程course_grade:根据课程名参数,查询该课程的成绩表,包括学号,姓名,成绩,按学号升序排序。

CREATE PROCEDURE course_grade (in course_name varchar(20))

SELECT student.sno,sname,grade from student,sc,course WHERE student.sno=sc.sno and sc.cno =course.cno and cname=course_name ORDER BY sno;

DROP PROCEDURE course_grade;

CALL course_grade("计算机导论");

(2)建立存储过程search_grade:根据姓名和课程名参数,查询该学生相应的课程成绩,若存在成绩,则返回成绩值,否则返回NULL。

create procedure search_grade(in student_name char(10), in course_name varchar(20), out re_grade smallint, out rname char(10))

Begin

If( not exists

(

select * from student, sc, course

where student.sno = sc.sno

and sc.cno = course.cno

and sname = student_name

and cname = course_name) )

then set re_grade = null;

else

select grade into re_grade from student, sc, course

where student.sno = sc.sno

and sc.cno = course.cno

and sname = student_name

and cname = course_name ;

end if;

end ;

#创建成功

-- 执行存储过程

call search_grade('王大力','数据库原理',@grade, @rname);

select @grade, @rname;

call search_grade('王大力','高等数学',@grade, @rname);

select @grade, @rname;

(3)创建存储过程take_course:根据参数学号和课程号,完成选课功能(要求能够根据选课人数加以限制)。

要求:

§ 检查该学生选课门数是否超过3门,若超过,不插入记录;

§ 检查该课程选课人数是否已满(在course表里添加一个属性列,记录课程人数限制);

ü 选课人数已满:不插入记录;

ü 选课人数未满且未插入过:完成数据插入操作;

ü 选课人数未满,已插入过:不插入记录

§ 最后返回执行结果信息,例如:

ü 超过3门,返回-1;

ü 选课人数已满。返回0;

ü 选课人数未满且未插入过:返回1;

ü 选课人数未满已插入过:返回2

create procedure take_course (in student_no char(7), in course_no char(3), out i tinyint )

begin

if(select count(*) from sc where sno= student_no) >= 3

then set i = 1;

else

if(select count(*) from sc where cno = course_no) >= 5

then set i= 0;

else

if exists (select * from sc where sno = student_no and cno = course_no)

then set i = 2;

else

insert into sc(sno, cno) values(student_no, course_no);

set i = 1;

end if ;

end if ;

end if ;

end ;

权限控制:

(1)创建超级用户admin,具有对所有数据库的所有访问权限,仅限本机连接(密码自行设置),并验证用户和权限设置是否正确。

CREATE user admin @localhost

IDENTIFIED by '123';

(2)创建管理员teacher_liu,具有对SC表、IS_STUDENT视图(实验5创建)的增删改查权限,并且具有授权的权限,允许从任意位置连接(密码自行设置),并验证用户和权限设置是否正确。

CREATE USER teacher_liu @'%' IDENTIFIED by '123456';

GRANT SELECT ,INSERT, UPDATE, DELETE on studentTable.sc TO teacher_liu @'%' WITH GRANT OPTION;

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,官方群点击此处进入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

21天学MySQL_SQL21天自学通.pdf

SQL21天自学通SQL 21 日自学通(V1.0) 翻译人 笨猪目录目录 1译者的话 14第一周概貌 16从这里开始 16第一天 SQL 简介 17SQL 简史 17数据库简史 17设计数据库的结构 21SQL 总览 23流行的SQL 开发工具 24SQL 在编程中的应用 27第二天 查询— — SELECT 语句的使用 30目标 30背景 …

lte盲重定向_LTE重选、切换、重定向的区别

【资料名称】&#xff1a;LTE重选、切换、重定向的区别【资料作者】&#xff1a;A【资料日期】&#xff1a;20150916【资料语言】&#xff1a;中文【资料格式】&#xff1a;DOC/DOCX【资料目录和简介】&#xff1a;这里主要简单阐述了LTE系统的小区重选、切换、重定向的区别小区…

冯乐乐 unity_Unity常用矩阵运算的推导补遗——切线空间

在上一篇文章中&#xff0c;我写了一些关于Unity中各个坐标空间及其转换矩阵是如何得到的&#xff0c;说实在的&#xff0c;我是那种“记忆需要依靠外部装置存储”类、如同《攻壳机动队》的电子脑一样的人&#xff0c;每次遇到问题了再去对着笔记慢慢翻找才是我的风格&#xff…

mysql 字段类型设计_Mysql字段类型设计相关问题!-阿里云开发者社区

Mysql是以文件存储在我们的系统的硬盘上面&#xff0c;那么(1)当我们读取写入的时候就会有磁盘IO的问题(2)当我们存储的数据是以页单位存储&#xff0c;而且每页的大小是16K&#xff0c;那么我们要尽可能的让我们的一页数据存放的更多。表结构宽度不要太大&#xff0c;也就是列…

mysql保存时乱码了_MySQL保存中文乱码的原因和解决办法

(3)MySQL的字符集设置。这个是重点了&#xff0c;一般都是在这里搞错而出现了mysql乱码。mysql编码设置可以分为三种设置&#xff1a;数据库的编码、表的编码、和字段的编码。a、数据库的编码&#xff1a;在sqlyog工具中操作把&#xff0c;右击数据库点击更改数据库&#xff0c…

mysql字符串语法_MySQL语法模板 函数:字符串

返回字符串的ASCII码ascii(str)返回字符串的二进制码bin(n)字符串的位数bit_length(str)字符串的字符数char(n,... [using charset])字符串的字符数character_length(str)字符串的字符数char_length(str)压缩函数compress(string_to_compress)进制转换conv(n,from_base,to_base…

python中convert函数用法_Python Pandas DataFrame.tz_convert用法及代码示例

Pandas DataFrame是带有标签轴(行和列)的二维大小可变的&#xff0c;可能是异构的表格数据结构。算术运算在行和列标签上对齐。可以将其视为Series对象的dict-like容器。这是 Pandas 的主要数据结构。Pandas DataFrame.tz_convert()用于将tz-aware轴转换为目标时区。用法&#…

ubuntu mysql支持中文_ubuntu (16.04) server 英文原版 添加中文语言支持 消除java 程序、mysql 数据库不能处理中文的错误...

ubuntu 16.04对于腾讯云主机要添加源&#xff0c;因为腾讯云主机(CVM)的源库中包很少文件/etc/apt/sources.list是一个普通可编辑的文本文件&#xff0c;保存了ubuntu软件更新的源服务器的地址。和sources.list功能一样的是/etc/apt/sources.list.d/*.list(*代表一个文件名&…

python偶数个数_python基础

标识符命名规则开发中&#xff0c;通常约定俗称遵守如下规则&#xff1a;删除变量和垃圾回收机制可以通过del语句删除不在使用的变量a 123 del a #删除了栈&#xff0c;没有删除堆链式赋值xy123 相当于 x123;y123系列解包赋值系列数据赋值给对应相同…

keyshot怎么让物体发光_户外发光字的防水措施怎么做,不亮了怎么修。

户外发光字的防水措施与维修发光字大多是安装在户外的&#xff0c;因此会受到热晒、雨淋、寒冻等因素的影响&#xff0c;这些因素都会加速LED发光字的老化&#xff0c;从而使LED发光字进水老化。那么&#xff0c;该怎么防止这种情况呢?一、在每个广告字的笔画的最下方&#xf…

linux mysql 确认命令_LINUX启动/重启/停上MYSQL的命令(详解)

如何启动/停止/重启MySQL一、启动方式1、使用 service 启动&#xff1a;service mysqld start2、使用 mysqld 脚本启动&#xff1a;/etc/inint.d/mysqld start3、使用 safe_mysqld 启动&#xff1a;safe_mysqld&二、停止1、使用 service 启动&#xff1a;service mysqld st…

mysql删除员工_数据库删除职工信息

《数据库技术原理与应用教程第2版》——1.4数据管理本节书摘来自华章出版社《数据库技术原理与应用教程第2版》一书中的第1章&#xff0c;第1.4节&#xff0c;作者 徐洁磐 操凤萍  &#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看。1.4数据管理人类社会有着…

mysql和ORTHOMCL_Orthomcl的详细使用

参考了众多文章并结合实际操作后的感想。Orthomcl需要的linux详细配置&#xff0c;简单叙述。系统&#xff1a;unixBLASTDatabase&#xff1a;oracle 或 mysql内存4G&#xff0c;硬盘100Gperl: DBI module 和 DBD-mysqlMCL程序详细操作过程及需要注意的点&#xff1a;1.数据库安…

手撕包菜 mysql_手撕包菜搭建

概述最近做了两件事&#xff0c;一件事就是买了块1t硬盘&#xff0c;第二件事就是买了个百度云会员&#xff0c;无奈找不到资源下载&#xff0c;那就没办法了&#xff0c;搭建一个磁力链接搜索引擎来爬去链接&#xff0c;然后去找资源。说道磁力链接搜索引擎&#xff0c;最好的…

word流程图怎么使箭头对齐_word 流程图 怎么把箭头对整齐啊?

word里画流程图把箭bai头画直du,可通过shift键实现画出zhi垂直或水平的直箭头。方法步dao骤如下:回1、打开需要答操作的WORD文档,选中需要画出箭头的流程图框图,点解绘图工具中的“排列对齐”,然后选中“左右居中”对齐。2、在插入形状中找到并点击箭头,使用箭头形状工具…

java 多线程同步_详解Java多线程编程中的线程同步方法

1、多线程的同步&#xff1a;1.1、同步机制&#xff1a;在多线程中&#xff0c;可能有多个线程试图访问一个有限的资源&#xff0c;必须预防这种情况的发生。所以引入了同步机制&#xff1a;在线程使用一个资源时为其加锁&#xff0c;这样其他的线程便不能访问那个资源了&#…

java商品管理系统_【Java Web】简易商品信息管理系统——首个Web项目

正文之前在学习了一段时间的Java Web的内容之后&#xff0c;当然需要有个项目来练练手&#xff0c;我相信大多数人的首选项目都是信息管理系统吧&#xff0c;所以我选择了商品信息管理系统目前项目源码已全部上传至GitHub&#xff0c;欢迎大家来fork —— 商品信息管理系统正文…

java 向上舍入_介绍Java的大数类(BigDecimal)和八种舍入模式

1.BigDecimal简介BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数&#xff0c;则标度是小数点后的位数。如果为负数&#xff0c;则将该数的非标度值乘以 10 的负scale 次幂。因此&#xff0c;BigDecimal表示的数值是(unscaledValue 10-s…

java循环的内部改变循环变量的值_java在for循环中怎样修改参数值?

// 待认证QueryFilter queryFilter0 new QueryFilter();queryFilter0.addCommand(new Command("busStatus", Op.EQ, "0"));int taxStatus0 taxInfoDao.getCount(queryFilter0);int businessStatus0 businessInfoDao.getCount(queryFilter0);int socialS…

java redis rpush_Redis Rpush 命令

Redis Rpush 命令Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。如果列表不存在&#xff0c;一个空列表会被创建并执行 RPUSH 操作。当列表存在但不是列表类型时&#xff0c;返回一个错误。注意&#xff1a;在 Redis 2.4 版本以前的 RPUSH 命令&#xff0c;都只…