mysql的视图,事务,索引,外键
视图
创建视图,将两个表合成一个表,方便以后查询,并且可以更改。
表1: students 有id,name,age字段
表2: classes 有id,name,sex字段
那么如果这是想同时查看这两张表:用以前学过的关联查询的命令:
select * from students inner join classes on students.id=classes.id;
现在创建视图,在上一条命令前加:
create view v_students as select * from students inner join classes on students.id=classes.id;
生成的视图就像一张表一样
查看视图:show tables;
select * fom 视图表名;
删除视图:drop view 视图表名;
事务
事务广泛的运用于订单系统、银行系统等多种场景
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性
事务具有ACID特性:原子性(A,atomicity)、一致性(C,consistency)、隔离性(I,isolation)、持久性(D,durabulity)。
- 原子性:事务内的所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
- 一致性:事务开始和结束前后,数据都满足数据一致性约束,就是说结束后该是什么样就时什么样,而不是经过事务控制之后数据变得不满足条件或业务规则。
- 隔离性:比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,事务之间不能互影响,它们必须完全的各行其道,互不可见。
- 持久性:事务完成后,该事务内涉及的数据必须持久性的写入磁盘保证其持久性。当然,这是从事务的角度来考虑的的持久性,从操作系统故障或硬件故障来说,这是不一定的。
事务命令
- 要求:表的引擎类型必须是innodb类型才可以使用事务,这是mysql表的默认引擎
- 查看表的创建语句,可以看到engine=innodb
show create table students;
- 修改数据的命令会触发事务,包括insert、update、delete
- 开启事务,命令如下:begin;
- 开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
- 提交事务,命令如下:commit;
- 将缓存中的数据变更维护到物理表中
- 回滚事务,命令如下:rollback;
- 放弃缓存中变更的数据,回退
索引
数据库中数据量很大的时候,查找就会变得很慢,
对于使用数据库查找大于增删改时,
优化方案:索引
缺点:添加的索引越多,增删改的性能越差。
- 查看索引
show index from 表名;
- 创建索引
方式一:建表时创建索引
create table create_index( id int primary key, name varchar(10) unique, age int, key (age) );
方式二:对于已经存在的表,添加索引
如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致 字段类型如果不是字符串,可以不填写长度部分 create index 索引名称 on 表名(字段名称(长度))
例: create index age_index on create_index(age);
删除索引:
drop index 索引名称 on 表名;
设置时间:
set profiling=1;
索引时间查看:
show profiles;
外键foreign key
- 如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表)
- 对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错
语法
查看外键
show create table 表名;
添加外键
要设为外键的字段必须和对应的表一一对应。
alter table students add constraint fk_students_gid foreign key (gid) references grade(gid) on delete cascade;
例:
alter table students add constraint f foreign key (cls_id) references classes(id);
删除外键
show create table 表名
alter table students drop foreign key 外键名字;