MySQL 学习笔记(二):数据库更新、视图和数据控制
基础准备:
在 school 数据库下建立student、course、sc 三个表:
create table student(
Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sage int,
Sdept char(20)); create table Course(
Cno char(4) primary key,
Cname char(40),
Cpno char(4),
Ccredit int); create table SC(
Sno char(9),
Cno char(4),
Grade int,
primary key(Sno,Cno),
foreign key (sno) references Student(sno),
foreign key (Cno) references Course(Cno)); insert into student values ('','李勇','男',20,'CS');
insert into student values ('', '刘晨','女',19,'IS');
insert into student values('', '王敏', '女',18, 'MA');
insert into student values('', '张立', '男',19, 'IS'); insert into Course values(1,'数据库', 5,4);
insert into Course values(2, '数学', 3 ,2);
insert into Course values(3, '信息系统', 1, 4);
insert into Course values('', '操作系统', '', 3);
insert into Course values('', ' 数据结构', '', 4);
insert into Course values('', '数据处理', '', 2);
insert into Course values('', 'PASCAL语言', '', 4); insert into SC values('', '', 92);
insert into SC values('', '', 85);
insert into SC values('', '', 88);
insert into SC values('', '', 90);
insert into SC values('', '', 80);
(一)数据库更新
1. 在school数据库中,确保表之间已经建立关系,用企业管理器建立数据库的关系图(Diagrams)
2. 在course 表中删除cno=1的记录,有什么结果?
报错:因为有外键约束。
3. 编辑course表和 sc表之间的关系,添加级联删除相关记录和级更新相关记录
create table SC(
Sno char(9),
Cno char(4),
Grade int,
primary key(Sno,Cno),
foreign key (sno) references Student(sno) on delete cascade on update cascade,
foreign key (Cno) references Course(Cno);
重复2的操作,观察course 表和 sc表的变化,有什么结果,为什么?
没有报错,成功删除 cno = 1行。
4. 将course表和sc表的课程号为2的都改为22,如何做?(提示:在Diagrams中编辑course表和 sc表之间的关系,选择级联更新相关记录cascade update related fields)
update sc set cno=22 where cno=2;
update course set cno=22 where cno=2;
5. 在SC表中,
(1)将95002同学的成绩都减少10%
update sc set course=80 where sno=95002;
(2) 课程号为3的改为33
update sc set cno=33 where cno=3;
改不了。不能修改子表,只能修改主表。
6.
(1) 在STUDENT表中插入一条新纪录: 95006 李三 男 21 IS
insert into student (sno, sname, ssex, sage, sdept) values (95006,'李三','男',21,'IS');
2)在SC表中插入一条新纪录: 95008 3 80
insert into student (sno, cno, grade) values (95008, 3, 80);
出错,因为不能修改子表,只能修改主表。
(二)建立新用户和数据控制管理
使用命令行界面:
1.创建用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器。
2.授权:
GRANT privileges ON databasename.tablename TO 'username'@'host'
说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*.
例子:
create user stu1@localhost identified by 'stu1';
grant create view on school.* to stu1@localhost;
当创建过程没问题,提示 Can't find any matching row in the user table
记得刷新一下: flush privileges;
3.建立存储过程和函数 建立存储过程sp1
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> create procedure sp1()
-> begin
-> grant create view on school.* to stu2@localhost;
-> grant select,update,insert,delete on school.student to stu2@localhost;
-> grant select,update,insert,delete on school.course to stu2@localhost;
-> grant select,update,insert,delete on school.sc to stu2@localhost;
-> end$$
mysql> delimiter ; #将语句的结束符号恢复为分号
建立存储过程sp2
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> create procedure sp2()
-> begin
-> grant select on school.student to stu1@localhost;
-> grant select on school.course to stu1@localhost;
-> grant select on school.sc to stu1@localhost;
-> grant insert on school.student to stu1@localhost, stu2@localhost;
-> grant update(Ccredit) on course to stu1;
-> end$$
建立存储过程sp3
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> create procedure sp3()
-> begin
-> revoke select on school.student from stu1@localhost;
-> revoke select on school.course from stu1@localhost;
-> revoke select on school.sc from stu1@localhost;
-> end$$
mysql> delimiter ; #将语句的结束符号恢复为分号
grant 语句赋予权限,revoke 语句取消权限。
撤销已经赋予给 MySQL 用户权限的权限revoke
revoke all on *.* from dba@localhost;
和grant类似,只需将关键字to换成from,同样可以针对特定用户特定库撤销特定权限。
MySQL 删除存储过程和函数:
基本的语法格式如下:
DROP {PROCEDURE|FUNCTION} sp_name;
其中,sp_name参数表示存储过程或函数的名称。
删除存储过程test。SQL代码如下:
drop procedure if exists test;
执行存储过程sp1(), sp2(), sp3()
call sp1();
call sp2();
call sp3();
(三) 视图建立和操作
1.将查询超过18岁的学生的结果建立视图view1,所有男同学的结果建立view2
create view view1 as select * from student where sage>18;
create view view2 as select * from student where ssex='男';
A.在student中,将CS 改为CC, view1,view2 有没有同步更改?
update student set sdept='cc' where sdept='cs';
同步更改了。
B.在view1中将女同学改为男同学,student 及view2有没有同步修改?
update view1 set ssex='男' where ssex='女';
同步更改了。
2. 将查询成绩及格(>=60)的姓名、系名、课程名和成绩的结果建立视图V1
然后对视图V1进行update, delete和insert操作,观察student,course和 sc三张基表的变化.
create view v1 as
select student.sname,student.sdept,course.cname,sc.grade from student,sc,course
where student.sno=sc.sno and course.cno=sc.cno
and grade>=60;
A.在student,course和 sc三表中进行update, delete和insert操作(自己设计测试用例),观察V1视图的变化. 同步变化
B.在V1视图中进行update, delete和insert操作(自己设计测试用例),观察student,course和 sc三张基表的变化. 同步变化
3.将查询超过平均成绩的学号、课程号及成绩的结果建立一个视图V2
create view v2 as select sno, cno,grade from sc where grade >(select avg(grade) from sc)
A.在sc表中进行update, delete和insert操作(自己设计测试用例),观察V2视图的变化. 同步变化
B.在V2视图中进行update, delete和insert操作(自己设计测试用例),观察sc基表的变化,并且分析原因. 同步变化
**结论:view视图是基于表的,当表中的内容更改时,视图中的内容也会更改,当更改视图时,同样表中的内容也会更改,二者互相关联。
MySQL 学习笔记(二):数据库更新、视图和数据控制的更多相关文章
- MySQL学习笔记(二):MySQL数据类型汇总及选择参考
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型. ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...
- MySQL学习笔记01_数据库基础知识
01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...
- MySQL学习笔记二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
- mysql学习笔记二 —— 权限体系
要点: 1.MySQL的API2.MySQL的相关文件3.MySQL的权限体系 1.MySQL的API 应用程序接口 (application program interface) 1.1 命令行中的 ...
- MySQL 学习笔记 二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
- MySQL学习笔记02_数据库和表的基本操作
02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specifica ...
- MySQL学习笔记二:权限管理
1. 创建和删除用户,mysql中的用户是由用户名和主机名来确定的 create user "user_name@host_name" identified by passwd; ...
- sql分类及基本sql操作,校对规则(mysql学习笔记二)
sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询 DQL 管理(增,删,改) DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...
- MySQL学习笔记(一)—数据库基础
一.数据库概述 1.数据库的组织结构 (1)数据库就是用来存放信息的仓库. (2)数据库里的数据集合都存放在数据表(table)里. (3)数据表由数据行(row)和数据 ...
- MySQL学习笔记(二)
连接与断开服务器 应该以下面的方式连接MySQL服务器,而不是将密码以明文方式输入连接. C:\> mysql -h host -u user -pEnter password: ******* ...
随机推荐
- 如何查看apache加载了哪些模块
apache2/bin/apachectl -l 可以看到类似下面的结果: 这是编译时就已编译在apache中的模块,启动时自然会加载. 另外一部分,要看apach的配置文件(httpd.conf)的 ...
- Java之Object类与instanceof关键字
Object类是所有类的父类: 我们上下代码: package com.learn.chap03.sec14; public class A { // 上面类A继承了Object类,因此又可这样定义: ...
- ubuntu12 安装redis和phpRedisAdmin详细流程
一.Ubuntu安装redis(redis默认端口6379) 方式一.直接下载源码,编译(redis可以编译源码之后直接运行,不需要安装) 1.1执行命令,从官网下载源码编译: $ wget http ...
- HTML_基础篇
一.HTML的概述 什么是HTML? html:Hyper Test Markup Language 超文本标记语言(它不是编程语言!) 超文本:功能比普通的文本更加强大. 标记语言:使用一组标签对内 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial—5.6 向量化 Vectorization
5.6 向量化 Vectorization 参考视频: 5 - 6 - Vectorization (14 min).mkv 下面是向量化的小例子,如果将所有u(j) .所有v(j).所有w(j)都看 ...
- java基础之JDBC七:C3P0连接池的使用
使用C3P0的前提是需要引入jar包 具体使用如下: /** * c3p0的应用 * 前提:引入c3p0的jar包 */ public class Test { public static void ...
- string基本字符系列容器(一)
C++STL提供了string基本字符系列容器来处理字符串,可以把string理解成字符串类,它提供了添加,删除,替换,查找和比较等丰富的方法. 使用string容器,需要头文件包含声明#includ ...
- c# 如何制作RealPlayer 视频播放器
c# 如何制作RealPlayer 视频播放器 主要介绍了如何使用 RealPlayer G2 Control 控件 那么我们怎么获得到这个控件呢,很简单,操作方法如下 右单击工具箱对话框的[所有 ...
- html页面的局部刷新
有时候我们在做一个动态/静态网页,网页中的某部分需要从服务器获取值但是不能把整个页面都提交到服务器,也就是要对页面做局部刷新,也就是对整个网页无刷新更新值.在这种情况下就需要用JS和XMLHttpRe ...
- js 禁止后退键
function doKey(e) { var ev = e || window.event; //获取event对象 var obj = ev.target || ev.srcElement; // ...