Mysql进阶操作
创建视图,创建存储过程,创建触发器,创建用户,备份数据库
(1)创建视图
视图可以简单理解成虚拟表,它和数据库中真实存在数据表不同,视图中的数据是基于真实表查询得到的。视图和真实表一样具备相似的结构。真实表的更新,查询,删除等操作,视图也支持。那么为什么需要视图呢?
a、提升真实表的安全性:视图是虚拟的,可以只授予用户视图的权限而不授予真实表的权限,起到保护真实表的作用。
b、定制化展示数据:基于同样的实际表,可以通过不同的视图来向不同需求的用户定制化展示数据。
c、简化数据操作:适用于查询语句比较复杂使用频率较高的场景,可以通过视图来实现。
视图的创建: create view <视图名称> as <select语句>;
视图的修改:alter view <视图名称> as <select语句>;
删除视图 : drop view <视图名称>
更新 : UPDATE
#更新视图数据相当于更新实际表,不适用基于多表创建的视图
先看一下表结构,我们用xscj做测试,有4个表,分别cj,kc,text和xs,我们来创建视图cj表的
然后调用,就是 select * from 视图名称
同时我如果修改cj_view表数据,那cj表数据也会变的
这里我们修改了视图,将最后数据从课程号6666改成了7777,cj中数据也变了
(2)创建索引
索引可以大大提升 MySQL 的检索速度。适合大量数据中查询
mysql的索引分为,全文索引,主键索引,唯一索引,普通索引和组合索引。
组合索引:一个组合索引包含两个或两个以上的列,
命令 CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])
创建普通索引:CREATE INDEX 索引名 ON 表名(段名);
创建唯一索引:CREATE UNIQUE INDEX 索引名 ON 表名(段名);
创建主键索引:ALTER TABLE 表名 ADD PRIMARY KEY (段名);
删除索引 : DROP INDEX 索引的名字 ON 索引的表;
有时候需要在长文本字段上建立索引,但这种索引会增加索引的存储空间以及降低索引的效率,这时就可以用到length,我们叫做前缀索引,前缀索引是选择字段数据的前n个字符作为索引,这样可以大大节约索引空间,从而提高索引效率。
ASC指定索引按照升序来排列,DESC指定索引按照降序来排列,默认为ASC
图片引用于百度文库。
(3)创建存储过程
存储过程是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
记得先改一下结束符,Delimiter $$,因为存储过程需要分号来结束
命令:CREATE PROCEDURE 存储器名字 (参数)
[存储过程限制]
begin
--------
end;
$$
调用: call 存储过程名称
1.参数列表,可选,格式:[IN | OUT | INOUT] param_name type
IN:输入参数
OUT:输出参数
INOUT:既可以输入也可以输出
type:参数类型,MySQL中的任意类型,如varchar等
2.存储过程限制
CONTAINS SQL:说明子程序包含SQL语句,但是不包含写数据语句
NO SQL:说明子程序不包含SQL语句
READS SQL DATA:说明子程序包含读数据读数据语句
MODIFIES SQL DATA:说明子程序包含写数据语句
例如:create procedure proc_sno_cj(in sno char(12)) reads sql data
创建一个存储过程,名字为proc_sno_cj ,输入参数是 sno,char类型,字节20, 只读
例如: 创建一个存储过程,用学号查询该同学的成绩平均分
我们用110这个同学
删除存储过程: drop procedure <存储过程名字>;
(4)触发器
触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。
CREATE <触发器名> < BEFORE | AFTER >
<INSERT | UPDATE | DELETE >
ON <表名> FOR EACH Row<触发器主体>
1.触发器名
触发器的名称,触发器在当前数据库中必须具有唯一的名称。如果要在某个特定数据库中创建,名称前面应该加上数据库的名称。
2. INSERT | UPDATE | DELETE
触发事件,用于指定激活触发器的语句的种类。
例如:在成绩表上创建一个触发器,当向成绩表插入数据时,检查分数是否在0 ~100 之间,如果不在此范围,则不能插入
触发器名字为Trig11,在插入之后,new表示新插入的数据。让我们插入一条新数据
插入一个学号为2013010220,成绩为102的,插入不进去,成绩为10的可以,这就是触发了条件
删除同样,drop trigger <触发器名字>
(5)外键
外键可以看我的另外一篇文章
https://blog.youkuaiyun.com/u011710631/article/details/105168512