视图
问题:
如果我有一个很复杂的sql语句,但是我还会经常使用该怎么办?
概念:
- 视图是一个虚拟表。
- 视图同样跟真实表一样包含行和列,但是视图没有在数据库中真实的存储数据
- 视图中行和列的数据都来自于其引用的真实表中行和列的数据
好处:
- 安全性
- 方便操作,减少编写复杂的重复的sql语句
- 易于扩展
例:a表、b表删除,使用c表
定义视图:
- create view 视图名称 as select 语句
查看视图:
查看所有的表,同时也会将所有的视图显示出来
show tables
使用视图:
- select * from 视图名称
删除视图:
- drop view 视图名称
视图Demo:
查询goods和goods_cates和goods_brands三张表中的信息
create view v_goods_details as select a.name as 'aname',a.price ,b.name as 'bname',c.name as 'cname' from goods as a inner join goods_cates as b on a.cate_id=b.id inner join good
事务
为什么会需要事务?
如,转账问题:
将A账户中的10000元,转入到B账户中,需要两部:
- 检查A的账户是否大于10000元
- 将A账户中的总金额减少10000元
- 将B账户中的总金额增加10000元
概念:
所谓事物,他就是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务四大特性(ACID)
- 原子性
- 一致性
- 隔离性
- 持久性
原子性:
一个事务被看作为一个最小的工作单位,整个事务中的所有操作,要么都提交成功,要么都提交失败,不可能只执行事务中的某一个部分。
一致性:
数据库总是从一个一致性的状态转移到另一个一致性的状态。事务中如果有操作没有提交成功,其他操作也不可能提交成功。
隔离性:
一个事务在提交前,对其他事务是不可见的
持久性:
一旦事务提交,则其所作的所有修改会永久性保存到数据库中。
开启事务
开启事务后,修改的数据会存储到本地缓存中,而不会修改物理表
begin
或者
start transaction
提交事务
将缓存中的数据变更到物理表中
commit
回滚事务
放弃缓存中的变更数据
rollback
注意点:
使用insert、update、delete会自动触发事务。可以通过set autocommit进行设置