【数据库系列教程】MySQL视图、事务、索引
本期教程为MySQL数据管理操作后期教程
一、视图 (View)
- 临时表、虚表
- 针对多表查询
- 作用
- 通过视图可以将经常用到的多表查询结果进行保存,下次再使用数据时,直接从视图中查询数据即可
- “对于频繁更新的数据,不适合创建视图”
1.创建视图
语法
create view 视图名称 as 查询语句;
CREATE VIEW view_name AS SELECT;
mysql> CREATE VIEW stu_teacher
-> AS
-> SELECT students.Name, students.Age, tutors.Tname FROM students, tutors WHERE students.TID = tutors.TID;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW TABLES;
+------------------+
| Tables_in_jiaowu |
+------------------+
| courses |
| scores |
| stu_teacher |
| students |
| tutors |
+------------------+
mysql> SELECT * FROM stu_teacher;
+-----------+------+--------------+
| Name | Age | Tname |
+-----------+------+--------------+
| GuoJing | 42 | Miejueshitai |
| YangGuo | 17 | HongQigong |
| DingDian | 25 | Jinlunfawang |
| HuFei | 31 | YiDeng |
| HuangRong | 16 | NingZhongze |
+-----------+------+--------------+
5 rows in set (0.00 sec)
2.删除视图
drop view 视图名称
mysql> DROP VIEW stu_teacher;
Query OK, 0 rows affected (0.00 sec)
二、事务 Transaction(重要)
- 针对修改操作
- 保证修改操作要么同时成功执行、回滚
1.启动事务
> start transaction;
可以在事务模式下,进行创建删除修改等操作
2.提交事务
- 提交事务以后会自动保存,并且自动退出事务
> commit;
3.回滚事务
- 提交回滚以后,不会对原数据进行修改,但会自动退出事务
> rollback;
三、索引 Index
1.什么是索引
- 建立合适的索引,优化、提高查询速度
- 针对数据表
- 不推荐使用经常变化的数据字段建立索引
- 特点:默认会使用主键字段生成索引
2.查看索引
mysql> show index from Account;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Account | 0 | PRIMARY | 1 | id | A | 5 | NULL | NULL | | BTREE | | |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3.创建索引
命令格式
create index 自定义索引名 on 表名(字段, 字段);
mysql> CREATE INDEX username_key ON Account(username);
4.删除索引
命令格式
drop index 索引名 on 表名;
mysql> DROP INDEX username_key ON Account;
5.查询分析器 explain
无索引情况
mysql> EXPLAIN SELECT * FROM sp WHERE price=4000;
+----+-------------+-------+------------+------+---------------+------+---------+------+-------------------------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+-------------------------+----------+-------------+
| 1 | SIMPLE | sp | NULL | ALL | NULL | NULL | NULL | NULL | 490028 #这里查询了49万次| 10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+-------------------------+----------+-------------+
有索引情况
创建索引
mysql> CREATE INDEX price_key ON sp(price);
mysql> EXPLAIN SELECT * FROM sp WHERE price=4000;
+----+-------------+-------+------------+------+---------------+----------------------+---------+-------+-------------------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+----------------------+---------+-------+-------------------+----------+-------+
| 1 | SIMPLE | sp | NULL | ref | price_key | price_key #使用了索引| 5 | const | 40 #只查询了40次| 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+----------------------+---------+-------+-------------------+----------+-------+
1 row in set, 1 warning (0.00 sec)