目录

一、视图

素材

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 |
+--------+----------+----------------+--------+---------------------+

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

mysql> update stu_mark
    -> set mark=mark-50
    -> where stu_mark.s_name='XiaoTian';

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

mysql> select * from stu_mark;
+------+----------+------+
| s_id | s_name   | mark |
+------+----------+------+
|    1 | XiaoWang |   80 |
|    2 | XiaoLi   |   71 |
|    3 | XiaoTian |   20 |
+------+----------+------+

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

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

5、查看视图的创建信息

mysql> show create view Tsinghua_stu \G
*************************** 1. row ***************************
                View: Tsinghua_stu
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `Tsinghua_stu` AS select `a`.`s_id` AS `学号`,`a`.`s_name` AS `姓名`,`a`.`s_sch` AS `学校`,`b`.`mark` AS `成绩`,`a`.`s_sign_sch` AS `大学` from (`sign` `a` join `stu_mark` `b` on((`a`.`s_id` = `b`.`s_id`))) where (`a`.`s_sign_sch` = 'Tsinghua University')
character_set_client: utf8
collation_connection: utf8_general_ci

mysql> show create view Peking_stu \G
*************************** 1. row ***************************
                View: Peking_stu
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `Peking_stu` AS select `a`.`s_id` AS `学号`,`a`.`s_name` AS `姓名`,`a`.`s_sch` AS `学校`,`b`.`mark` AS `成绩`,`a`.`s_sign_sch` AS `大学` from (`sign` `a` join `stu_mark` `b` on((`a`.`s_id` = `b`.`s_id`))) where (`a`.`s_sign_sch` = 'Peking University')
character_set_client: utf8
collation_connection: utf8_general_ci

6、删除创建的视图

mysql> drop view Peking_stu;

mysql> drop view Tsinghua_stu;

二、索引

表结构如下:

writers表结构
字段名     数据类型      主键 外键 非空 唯一 自增
w_id      SMALLINT(11)  是   否   是   是   是
w_name    VARCHAR(255)  否   否   是   否   否
w_address VARCHAR(255)  否   否   否   否   否
w_age     CHAR(2)       否   否   是   否   否
w_note    VARCHAR(255)  否   否   否   否   否

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

mysql> create table writers( 
w_id smallint(11) primary key not null auto_increment, 
w_name varchar(255) not null, 
w_address varchar(255), 
w_age char(2) not null, 
w_note varchar(255), 
unique index UniqIdx(w_id) 
)
engine=MyISAM;

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

mysql> alter table writers add index nameIdx(w_name);

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

mysql> create index MultiIdx on writers(w_address,w_age);

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

mysql> create fulltext index FTIdex on writers(w_note);

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

# 两种办法均可
mysql> drop index FTIdex on writers;
mysql> alter table writers drop index FTIdex;