视图:
- 什么是视图:数据库中表和视图都是其内部的对象,视图可以理解成一个虚拟的表, 视图本质就是取代了一段sql查询语句。
- 为什么使用视图:因为有些数据的查询需要使用大量的sql语句,每次书写比较麻烦,使用视图可以起到sql重用的作用,可以隐藏表中的敏感信息。
- 如何使用:
格式:create view 视图名 as 子查询;
练习:
1:创建部门是20并且工资小于3000的视图
create view v_emp_20 as (select * from emp where deptno=20 and sal<3000);
2:创建每个部门的工资总和,平均工资,最大工资,最小工资的视图
create view v_emp_dept_info as (select deptno,sum(sal), avg(sal), max(sal), min(sal) from emp group by deptno );
视图的分类:
1. 简单视图:创建视图的子查询中不包含:去重,函数,分组,关联查询的视图称为简单视图,可以对数据进行增删改查操作
2. 复杂视图:创建视图的子查询中包含:去重,函数,分组,关联查询的视图称为复
杂视图,只能进行查的操作。
Mysql课堂笔记(6)
视图
简单视图的增删改操作 操作方式和table一样
1. 插入数据 如果插入的数据在视图中不显示但是原表中显示,称为数据污染。
insert into v_emp_10 (empno,ename)
values(10010,'Tom');
-正确写法
insert into v_emp_10 (empno,ename,deptno)
values(10086,'Jerry',10);
-可以通过with check option 关键字禁止出现数据污染
create view v_emp_30 as (select * from emp where deptno=30) with check option;
-测试:
insert into v_emp_30 (empno,ename,deptno)
values(10011,'张三',30);
insert into v_emp_30 (empno,ename,deptno)
values(10012,'李四',20);
2. 修改数据 只能修改视图中存在的数据
update v_emp_30 set ename='zhangsan' where empno=10011;(成功)
update v_emp_30 set ename='汤姆' where empno=10010;(失败)
3. 删除数据 只能删除视图中存在的数据
delete from v_emp_30 where empno=10011;
delete from v_emp_30 where empno=10010;
修改视图:
- 格式:create or replace view 视图名 as 子查询;
create or replace view v_emp_10 as(select * from emp);
删除视图:
drop view v_emp_10;
drop view if exists v_emp_10; 没有也不会报错
视图别名:
- 创建视图的时候子查询对字段起了别名,则后期对视图进行操作只能使用别名。
create view v_emp_10 as (select empno,ename name from emp);
- 测试:
update v_emp_10 set name='汤姆' where empno=10010;(成功)
update v_emp_10 set ename='汤姆aaa' where empno=10010;(失败)
视图总结:
1. 视图是数据库中的对象,代表一段sql,可以理解成虚拟表。
2. 作用:重用sql , 隐藏敏感字段。
3. 分类:简单 和 复杂 简单(不包含去重 函数 分组 关联查询) 复杂反之只能查看。
4. 插入数据时可能数据污染 通过with check option解决。
5. 修改和删除只能操作视图中存在的数据。
6. 起了别名 只能用别名。
Mysql课堂笔记(6)
约束
约束:
- 什么是约束:约束是给表字段添加的限制条件
非空约束 not null:
- 字段值不能为null
create table t1(id int,age int not null);
- 测试:
insert into t1 values(1,20);(成功)
insert into t1 values(2,null);(失败)
唯一约束 unique:
- 字段值不能重复
create table t2(id int,age int unique);
- 测试:
insert into t2 values(1,20);(成功)
insert into t2 values(2,20); (失败)
主键约束 primary key
- 字段值不能重复也不能为null
- 创建表的时候添加主键
create table t_pri(id int primary key auto_increment);
- 创建表后添加主键
create table t_pri2(id int); alter table t_pri2 add primary key (id);
- 删除主键 一个表只能有一个主键
alter table t_pri2 drop primary key;
自增:
1. 当字段的值为null的时候数值自动+1
2. 删除数据数值不减
3. 如果插入数据指定比较大的值,下次从最大值基础上+1,如果删除最大值,也是从曾经出现的最大值基础上+1
4. 使用delete删除全表数据 自增值不变
5. 使用truncate删除 自增数值清零
十四:默认约束 default
- 当字段的值不赋值的时候 默认约束的内容生效
create table t_def(id int, age int default 10);
检查约束 check:
- mysql语法支持 不报错 但是没有效果
create table t_check(id int,age int check(age>10));
外键约束:
- 作用:
1. 外键值可以为null,可以重复,但是不能是不存在的值
2. 外键指向的表,不能先删除
3. 外键指向的数据不能先删除,如果需要删除,先删除外键约束或先删除外键的数据
(断开关联关系)
- 使用外键必须要求两张表相同的InnoDB引擎,myisam不支持外键约束
- 除非特定情况 一般工作中不使用外键约束,使用java代码通过逻辑对插入和删除的数
据进行限制,因为加了外键约束后不方便测试
如何使用外键约束:
1. 创建部门表
create table dept(id int primary key auto_increment,name varchar(10));
2. 创建员工表
create table emp(id int primary key auto_increment,name varchar(10),deptid int,constraint
fk_dept foreign key(deptid) references dept(id));
- 内容介绍
constraint 外键约束名 foreign key(外键字段) references 表名(主键)
- 插入数据
insert into dept values(null,'神仙'),(null,'妖怪');