MySQL实战(六):MySQL视图、索引

时间:2024-10-10 15:33:15

目录

一、视图

素材

1、创建考上 Peking University 的学生的视图

2、创建考上 Tsinghua University 的学生的视图

3、XiaoTian 的成绩在录入的时候录入错误多录了50分,对其录入成绩进行更正

4、查看更新过后视图和表的情况

5、查看视图的创建信息

6、删除创建的视图

二、索引

1、在数据库里创建表 writers,存储引擎为MyISAM,创建表的同时在 w_id 字段上添加名称为UniqIdx 的唯一索引

2、使用 alter table 语句在 w_name 字段上建立 nameIdx 的普通索引

3、使用 CREATE INDEX 语句在 w_address 和 w_age 字段上面建立名称为 MultiIdx 的组合索引

4、使用 create index 语句在 w_note 字段上建立名称为 FTIdex 的全文索引

5、删除名为 FTIdx 的全文索引


一、视图

素材

建表语句

# 创建 stu 表
CREATE TABLE stu 
(
s_id INT PRIMARY KEY,
s_name VARCHAR(20),
addr VARCHAR(50),
tel VARCHAR(50)
); 
# 创建 sign 表
CREATE TABLE sign 
(
s_id INT PRIMARY KEY,
s_name VARCHAR(20),
s_sch VARCHAR(50),
s_sign_sch VARCHAR(50)
); 
# 创建 stu_mark 表
CREATE TABLE stu_mark (s_id INT PRIMARY KEY ,s_name VARCHAR(20) ,mark int ); 

插入数据

# 向 stu 表插入记录的INSERT语句如下:
INSERT INTO stu 
VALUES(1,'XiaoWang','Henan','0371-12345678'),
(2,'XiaoLi','Hebei','13889072345'),
(3,'XiaoTian','Henan','0371-12345670');
# 向 sign 表插入记录的INSERT语句如下:
INSERT INTO sign 
VALUES(1,'XiaoWang','Middle School1','Peking University'),
(2,'XiaoLi','Middle School2','Tsinghua University'),
(3,'XiaoTian','Middle School3','Tsinghua University');
# 向 stu_mark 表插入记录的INSERT语句如下:
INSERT INTO stu_mark VALUES(1,'XiaoWang',80),(2,'XiaoLi',71),(3,'XiaoTian',70);

1、创建考上 Peking University 的学生的视图

mysql> create view Peking_stu(学号,姓名,学校,成绩,大学) as
select a.s_id,a.s_name,a.s_sch,mark,s_sign_sch from sign a inner join stu_mark b
on a.s_id=b.s_id
where s_sign_sch='Peking University';

mysql> select * from Peking_stu;
+--------+----------+----------------+--------+-------------------+
| 学号   | 姓名     | 学校           | 成绩   | 大学              |
+--------+----------+----------------+--------+-------------------+
|      1 | XiaoWang | Middle School1 |     80 | Peking University |
+--------+----------+----------------+--------+-------------------+

2、创建考上 Tsinghua University 的学生的视图

mysql> create view Tsinghua_stu(学号,姓名,学校,成绩,大学) 
as select a.s_id,a.s_name,a.s_sch,mark,s_sign_sch 
from sign a inner join stu_mark b 
on a.s_id=b.s_id 
where s_sign_sch='Tsinghua University';

mysql> select * from Tsinghua_stu;
+--------+----------+----------------+--------+---------------------+
| 学号   | 姓名     | 学校           | 成绩   | 大学                |
+--------+----------+----------------+--------+---------------------+
|      2 | XiaoLi   | Middle School2 |     71 | Tsinghua University |
|      3 | XiaoTian | Middle School3 |     70 | Tsinghua University |
+--------+----------+----------------+--------+------------