1、索引

  • 什么是索引

    • 一个索引是存储在表中的数据结构,索引在表的列名上创建。索引中包含了一个列的值,这些值保存在一个数据结构中
  • 索引优缺点
    • 索引大大提高了查询速度
    • 会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件
  • 普通索引
    • 普通索引是最基本的索引类型,没有任何限制,值可以为空,仅加速查询。普通索引是可以重复的,一个表中可以有多个普通索引
    • 创建索引
      • create index 索引名称 on 表名(字段);
    • 查看索引
      • show index from 表名;
    • 删除索引
      • drop index 索引名称 on 表名;
# 给 name 字段创建索引 aa
mysql> create index aa on t_student(name); # 查看索引
mysql> show index from t_student; +-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+---
| t_student | 1 | aa | 1 | name | A | 2 | NULL | NULL | YES | BTREE | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
# 删除索引 aa
mysql> drop index aa on t_student;
  • 唯一索引

    • 它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值
    • 创建索引
      • create unique index 索引名称 on 表名(字段)
# 给 name 字段创建唯一索引
mysql> create unique index bb on t_student(name); mysql> show index from t_student; +-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| t_student | 0 | bb | 1 | name | A | 2 | NULL | NULL | YES | BTREE | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
  • 主键索引

    • 主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;索引列的所有值都只能出现一次,即必须唯一。简单来说:主键索引是加速查询 + 列值唯一(不可以有null)+ 表中只有一个
    • 主键是一种唯一性索引,但它必须指定为 "PRIMARY KEY"
    • 每个表只有一个主键
    • 创建索引
      • alter table 表名 add primary key(字段)
# 给 score 字段添加主键索引
mysql> alter table t_course add primary key(score); mysql> show index from t_course; +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| t_course | 0 | PRIMARY | 1 | score | A | 6 | NULL | NULL | | BTREE | |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

2、视图

  • 视图的特点

    • 视图时由基本表产生的虚表
    • 视图的创建和删除不影响基础表
    • 视图的更新和删除直接影响基础表
    • 基础表的更新和删除直接影响视图  
  • 视图的作用
    • 数据库中数据的查询非常复杂,例如多表,子查询,编写语句较多,并且这种查询常被重复使用,那么我们就可以创建视图,避免每次写 sql 语句会错误,也提高了查询的效率
    • 为了安全,在公司中,有些字段为保密字段,那么可以创建视图,限制对某些字段的操作。 
  • 创建视图
    • create view 视图名 as (查询 sql 语句)
# 创建视图 v_stu
mysql> create view v_stu as (select id,name,age from t_student);
  • 显示目前有哪些视图

    • show tables;
    • 注意点创建的视图都在表的最下面
# 查看创建的视图 v_stu
mysql> show tables; +-------------------+
| Tables_in_student |
+-------------------+
| t_course |
| t_student |
| v_stu |
+-------------------+ mysql> select * from v_stu;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | zhangsan | 18 |
| 2 | wangwu | 20 |
| 3 | zhaoliu | 19 |
| 4 | lisi | 22 |
+----+----------+------+
  • 修改视图

    • alter view 视图名 as (查询语句)
mysql> alter view v_stu as (select id,name from t_student);

mysql> select * from v_stu;
+----+----------+
| id | name |
+----+----------+
| 4 | lisi |
| 2 | wangwu |
| 1 | zhangsan |
| 3 | zhaoliu |
+----+----------+
  • 删除视图

    • drop view 视图名
# 删除视图 v_cou
mysql> drop view v_cou; mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| t_course |
| t_student |
| v_stu |
+-------------------+

最新文章

  1. linux基本知识2
  2. 基于Ruby的watir-webdriver自动化测试方案与实施(二)
  3. Nginx编译参数.md
  4. 小tip:纯CSS让overflow:auto页面滚动条出现时不跳动
  5. java Literals
  6. Spring AOP 实现原理
  7. 检测系统是X86系统,还是X64系统
  8. android打造万能的适配器(转)
  9. 关于Kingfisher--备用
  10. 伪AP检测技术研究
  11. C# 文件copy和文件删除
  12. link 标签
  13. T66597 小xzy的任务 题解
  14. ORM-面向对象&关系数据库
  15. 怎么用ajax下载文件
  16. 各操作系统安装redis
  17. C语言实现Winsocket网络传输数据时乱码问题
  18. leecode第五题(最长回文子串)
  19. 【转】Vue中mintui的field实现blur和focus事件
  20. Linux运维工程师需要掌握什么才能胜任工作呢

热门文章

  1. Linux基础篇,文本数据的比较与排序:sort、uniq、comm、diff
  2. linux如何杀死指定进程
  3. lr 遇到的问题
  4. shell命令-while语句
  5. 发布公开的pod
  6. Math.max.apply()用法
  7. Java成长第四集--文本处理IO流
  8. 004-流程控制-C语言笔记
  9. day23作业
  10. vue项目中使用bpmn-节点篇