数据库相关

2018-09-19  本文已影响0人  最后的夏t

                                                                                     视图

视图:数据库中表和视图都是其内部的对象,视图可以理解成一条虚拟的表,视图本质上就是取代了一段SQL查询语句

为什么使用视图:因为有些数据的查询需要书写大量的SQL语句,每次书写浪费时间,使用视图可以起到SQL语句的重用作用,可以隐藏敏感信息

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,hiredate,comm,job from emp);

    视图分类

简单视图:创建视图的子查询不包含:去重,函数,分组,关联查询,简单视图可以对表中的数据进行,增加,修改,删除,查询(都是对原表中的数据进行操作)

复杂视图:和简单视图相反,只能进行查询

1.插入数据到视图

insert into v_emp_10(enpno,ename) values(10010,'Tom');

数据污染:往视图中插入一条视图中不可见,但是原表中存在的数据称为数据污染

通过with check option解决数据污染问题

create view v_emp_20 as(select * from emp where deptno=20 )with  check option;

测试:

insert into v_emp_20(enmp,ename) values(10012,'lucy');//报错

insert into v_emp_20(enmp,ename,deptno) values(10012,'lucy',20);

2.修改和删除只能对视图中存在的数据进行操作

3.修改视图

create or replace view 视图名 as (子查询);

create or replace view v_emp_20 as (select * from  emp where deptno=20 and sal>2000);

4.删除视图

drop view 视图名

drop view e_emp_10;

5.视图别名:如果创建视图的子查询中使用别名,则对视图进行增删改查时只能使用别名

create view v_emp as (select ename name from emp );

此时在视图中只能使用name

约束

约束:就是给表字段添加限制条件

非空约束:not null,创建表的时候在字段后面添加 not null

create table t1(id int,age int not null);

唯一约束 unique

create table t2(id int,age int unique);

主键约束 primary key 唯一且非空

默认约束 default 给字段设置默认值

create table t3( id int,age int default 20);

insert into t3 (id) values(1);

外键约束 用来建立关系的字段称为外键

外键约束:添加外键约束的字段,值可以为null,可以重复,但是不能是关联表中不存在的数据,外键指向的数据不能先删除,外键指向的表不能先删除

格式:,constraint 约束名称 foreign key (外键字段名) references 表名(主键名)

工作中除非特定场所一般不使用外键约束,因为添加约束后会影响测试效率,一般通过代码建立逻辑外键

                                                                                    索引

索引:索引是数据库中用来提高查询效率的技术,类似于目录

为什么使用索引:如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直达找到数据位置,使用索引后会将磁盘块类似树状结构保存,查询数据时会大大降低访问磁盘块数量,从而提高查询效率

索引越多越好吗?

索引会占用磁盘空间,只对常用的查询字段创建索引

索引就一定好吗?

如果表中数据量很少,添加索引反而会影响查询效率

创建索引  create index 索引名 on 表名(字段(字段长度));

create index index_item_title on item2(title);

查看索引

show index from 表名

show index from item2;

只要是给表添加主键约束,则数据库会为此表自动创建主键字段的索引

删除索引

drop index 索引名 on 表名

drop index index_item_title on item2;

复合索引

通过多个字段创建的索引称为复合索引

create index 索引名 on 表名(字段1,字段2..);

create index index_item_title_price on item2(title,price);

事务

事务的ACID特性

Atomicity(原子性):最小不可拆分,全部成功或全部失败

Cobsistency(一致性):从一个一致状态到另一个一致状态

IsoIation(隔离性):多个事务之间互补影响

Durablity(持久性):事务完成后数据提交到数据库持久保存

      显示在一行

group_concat(字段1,字段2..);

查询每个人的科目和分数显示在一行

select name, group_concat( subject,':',score) from student group by name;

+------+----------------------------------+

| name | group_concat( subject,':',score) |

+------+----------------------------------+

| 李四 | 英语:78,语文:59,数学:88,体育:95  |

| 王五 | 英语:98,数学:54,语文:75,体育:88  |

| 张三 | 体育:77,英语:55,数学:77,语文:66  |

+------+----------------------------------+

查询每个人不及格的科目以及分数,不及格的科目数量

select name,group_concat(subject,'-',score),count(*) from student  where score<60 group by name;

+------+---------------------------------+----------+

| name | group_concat(subject,'-',score) | count(*) |

+------+---------------------------------+----------+

| 李四 | 语文-59                        |        1 |

| 王五 | 数学-54,体育-52                |        2 |

| 张三 | 英语-55                        |        1 |

+------+---------------------------------+----------+

上一篇 下一篇

猜你喜欢

热点阅读