您的位置:首页 > 数据库 > MySQL

MySQL数据库---视图、约束与索引以及事务

2019-10-25 15:50 1106 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_44779847/article/details/102744538

MySQL数据库—视图、约束与索引

一、视图view
**- 什么是视图:**数据库中表和视图都是其内部的对象,视图本质其实是取代了一段SQL查询语句,视图没有自己独立的数据,数据来自于原表
- 视图的作用: 1. 重用SQL,提高开发效率 2. 隐藏敏感字段

- 格式: create view 视图名 as (子查询);

  1. 创建一个10号部门的视图
    create view v_emp_10 as(select * from emp where deptno=10);
  2. 创建一个没有工资的员工表视图
    create view v_emp_nosal as(select empno,ename,deptno from emp);

- 视图的分类:
3. 简单视图: 创建视图的子查询中不包含去重,分组,关联查询,聚合函数的视图称为简单视图,可以对视图中的数据进行增删改查操作
4. 复杂视图: 和简单视图相反,只能对视图中的数据进行查询操作

  • 创建查询每个部门平均工资,最高工资,最低工资,工资总和,部门人数的视图
    create view v_emp_info as (select deptno,avg(sal),max(sal),min(sal),sum(sal),count(*) from emp group by deptno);
    ####对简单视图进行增删改操作
  • 操作方式和table一样
    insert into v_emp_10 (empno,ename,deptno)values(10010,‘Tom’,10); //插入成功
    insert into v_emp_10 (empno,ename,deptno)values(10011,‘Jerry’,20);//
    数据污染
    -数据污染:当往视图中添加一条视图中不可见原表中却可见的数据称为数据污染,可以通过创建视图时添加with check option 解决。

    create view v_emp_20 as(select * from emp where deptno=20) with check option;
    insert into v_emp_20 (empno,ename,deptno)values(10012,‘刘备’,10);//数据污染失败
    insert into v_emp_20 (empno,ename,deptno)values(10012,‘刘备’,20);//成功!
  • 修改和删除只能操作视图中存在的数据
    update v_emp_10 set ename=‘TTT’ where ename=‘Tom’;//成功
    update v_emp_10 set ename=‘xxx’ where ename=‘Jerry’; 失败
    delete from v_emp_10 where empno=10010; 成功
    delete from v_emp_10 where empno=10011; 失败
    - 创建或替换视图
    create or replace view v_emp_10 as (select ename,sal from emp where deptno=10);
    - 删除视图
    drop view v_emp_10;
  • 别名:创建视图时使用了别名,则对视图操作时只能使用别名
    create view v_emp_30 as (select ename name from emp where deptno=30);
    select ename from v_emp_30; 报错不认识ename 应该用name

二、约束

  • 约束: 创建表时给字段添加的限制条件
    1. 主键约束 primary key
  • 限制主键的值唯一且非空
    2. 非空约束 not null
  • 限制字段的值不能为null
    create table t1(id int,age int not null);
    insert into t1 values(1,20); //成功
    insert into t1 values(2,null);//失败
    3. 唯一约束 unique
  • 限制字段的值不能重复
    create table t2(id int,age int unique);
    insert into t2 values(1,20);//成功
    insert into t2 values(2,20);//失败
    4. 默认约束 default
  • 给字段添加默认值
    create table t3(id int,age int default 20);
    insert into t3 values(1,10);
    insert into t3 values(2,null);
    insert into t3 (id) values (3);//默认值生效
    5. 外键约束
  • 外键:用于建立关系的字段称为外键
  • 添加外键约束的字段值可以为null,可以重复,但是不能是关联表中不存在的数据,如果建立了关系被关联的数据不能先删除,被关联的表不能先删除
  • .
    三、索引
  • **索引:**索引是数据库中提高查询效率的技术,类似于字典的目录
    **- 索引的作用:**数据会零散的保存在每一个磁盘块中,如果不使用索引,查询数据时会挨个遍历每一个磁盘块查找数据,如果使用了索引,磁盘块会以树桩结构保存,查找数据时能够大大降低访问的磁盘块的数量,从而提高查询效率
    - 有索引就一定好吗?
    不是,因为数据量小的话会降低查询效率,所以只针对大量数据访问时才使用索引技术
    - 索引是越多越好吗?
    不是,因为索引会占用磁盘空间,只针对查询时频繁使用的字段创建索引
    - 创建索引的格式:
    create index 索引名 on 表名(字段名(?长度));
      创建索引前先查询一次 看耗费时间 1.39秒
      select * from item2 where title=‘100’;
    1. 创建索引
      create index i_item_title on item2(title);
    2. 验证 耗费时间0.01秒
      select * from item2 where title=‘100’;
      - 查看索引
      如果给表添加主键约束,会自动创建主键的索引
  • 格式: show index from 表名;
    show index from item2;
    - 删除索引:
    drop index 索引名 on 表名;
    drop index i_item_title on item2;
    - 复合索引:
    通过多个字段创建索引
    create index i_item_title on item2(title,price);
    show index from item2;//创建了两个索引
    - 总结:
  1. 索引是数据库中提高查询效率的技术类似于目录
  2. 因为索引会占用磁盘空间不是越多越好,只针对查询时频繁使用的字段创建索引。
  3. 数据量越大索引效果越明显,如果数据很少可能会降低查询效率。

四、事务

  • 事务是数据库中执行同一业务多条SQL语句的工作单元,保证多条SQL全部执行成功或全部执行失败
  • 相关SQL: 开启事务begin 提交事务commit 回滚事务rollback 保存回滚点savepoint xxx 回滚到某个回滚点rollback to xxx;
  • 事务的四大特性,ACID特性, ACID特性是保证事务正确执行的四大基本要素
  1. **Atomicity:原子性,**最小不可拆分,保证全部成功或全部失败
    **Consistency: 一致性,**从一个一致状态到另一个一致状态
  2. Isolation: 隔离性,多个事务之间互不影响
  3. Durability: 持久性,事务提交后数据保存到磁盘中持久生效

###group_concat()方法 组连接
13. 查询每个部门的员工姓名和工资,要求每个部门的数据显示在一行
select deptno,group_concat(ename,’:’,sal) from emp group by deptno;
14. 查询每种工作的员工姓名,要求员工姓名一行显示
select job,group_concat(ename) from emp group by job;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐