– 什么是视图?视图就是一个虚拟的表,就是一个查询结果
– 可以分权限处理
– 还是以学生管理系统为例,假定MySQL任课老师需要查看学生考试成绩,
– 我们可以采用视图为任课教师提供查看学生考试成绩的视图,
– 数据包括姓名,学号,成绩,课程名称。
– 创建视图
create view vw_mysqlscore
AS
select name,student.stuid,socre,subname from student INNER JOIN score
ON student.stuid=score.stuid
INNER JOIN subject
ON score.subid=subject
.subid
where subname=‘mysql’;
– 怎么调用视图
– 视图就是一个虚拟的表,就是一张表,查询该怎么用就怎么用
select * from vw_mysqlscore;
select * from vw_mysqlscore ORDER BY socre desc;
– 删除视图
drop view vw_mysqlscore;
– 查看视图
desc vw_mysqlscore;
show create view vw_mysqlscore;
– 修改视图:不建议用,如果真的要修改视图,建议把原来的视图删掉,重新创建
alter view vw_mysqlscore
AS
select name,student.stuid,socre,subname,sex from student INNER JOIN score
ON student.stuid=score.stuid
INNER JOIN subject
ON score.subid=subject
.subid
where subname=‘mysql’;
– 视图里的数据都是拿的原表中的数据
– 如果原表中的数据发生了更改,视图数据会进行更改吗?会
select * from student;
– 修改原表中的数据
update student set name=‘张小三’ where stuid=1;
select * from vw_mysqlscore;
– 视图就是一张虚拟表,也可以使用增删改语句,如果
– 视图数据发生了改变,会影响原表中的数据吗?会
– 建议:不要使用视图进行增删改,比如我要添加一条数据?
– 我该怎么添加?视图只是包含原表中的部分数据,在做添加的时候
– 原表中有可能有一些非空字段在视图中没有,这时候添加就会有问题
update vw_mysqlscore set name=‘张三岁’ where stuid=1;
– 通过修改表建立索引:alter table add index (列名)
– alter table add unique(列名)
– alter table add PRIMARY key(列名)
– alter table add fulltext(列名)
– 如果使用这种方式,建议先把表数据删掉,在添加索引
– 索引:就相当于一本书的目录,加快查询速度,降低了增删改速度
– 内容改了,目录也得改,增加了表的文件大小(索引文件甚至可能比数据文件还大)
– 普通索引:仅仅提高了查询速度
– 在学生信息表为学生姓名创建普通索引:ix_name
ALTER TABLE student
add INDEX ix_name(name);
SELECT * from student where name=‘张三’;
– 删除索引
alter table student
drop index ix_name;
– 主键索引:要求列必须唯一,一个表中只能有一个主键
ALTER table 表
ADD PRIMARY key(列名)
– 唯一索引:要求列的值必须唯一,一个表可以有多个唯一索引
– 在学生信息表为电话号码创建唯一索引:UE_phone
ALTER table student
add UNIQUE UE_phone(phone);
– 单列索引,和普通索引很类似
– 给生日添加一个单列索引
ALTER table student
add INDEX ix_bir(birthday);
– 多列索引 用的很少
– 使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。
– 如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。
– 给生日和电话号添加一个多列索引
ALTER table student
ADD index ix_birorphone(birthday,phone);
create table stu(
name VARCHAR(50) not null
)charset=utf8,ENGINE=myisam;
INSERT into stu values(‘You Have Only One Life’);
select * from stu;
– 全文索引:英文 一般根据单词搜索,因为英文每个单词之间都有空格(了解)
– 对文章内容每个词做的索引,对中文的意义不大,
– 因为英文有空格,标点符号来拆分单词,进而对单词进行索引;
– 而中文没有空格来隔开每个词语,MySQL无法识别每个中文词是怎么隔离开的。
– 只能创建在char,varchar或text类型的字段上。
– myisam 了解
ALTER table stu
add FULLTEXT fl_text(name);
– 全文索引查询:
SELECT * from stu where MATCH(name) AGAINST(‘One’);
– 如果向某一表导入数据量大时,比如导入500万条,
– 应先去掉索引,导入完成后统一加索引。
– 例如下面所示
create table tableName (
列1 列类型 列属性,
…
列N 列类型 列属性,
primary key(列名),
index (列名),
unique(列名),
fulltext(列名)
)engine xxxxx charset xxxx
– 删除索引 删除普通 单列 多列 唯一 全文
ALTER table student
DROP index ix_name;
– 删除主键索引
alter table 表名
DROP PRIMARY key;
– 建议在创建表的时候添加索引
– 存储过程就相当于java中的方法 sql编程 参数:输入(传值 IN) 输出(有返回值的方法)
– 了解
– 1.查询mysql科目的最高分
– 创建存储过程 –
create PROCEDURE usp_maxMysql()
BEGIN
– MYSQL 的最高分
select max(socre) from subject INNER JOIN score
on subject
.subid=score.subid
where subname=‘mysql’;
END
– 调用
call usp_maxMysql();