底价网站建设,怎么知道网站哪家公司做的,海南在线人才,临沂网站建设有哪些事务和视图 1 事务1.1 事务的介绍 ACID1.2 演示事务的使用步骤1.2.1 事例#xff1a;张无忌转账500给赵敏 1.3 事务并发问题的介绍1.4 删除在事务中的区别 2 视图2.1 视图的介绍2.2 视图的创建2.3 视图的修改2.3.1 方式一 create or replace view2.3.2 方式二 alt… 事务和视图 1 事务1.1 事务的介绍 ACID1.2 演示事务的使用步骤1.2.1 事例张无忌转账500给赵敏 1.3 事务并发问题的介绍1.4 删除在事务中的区别 2 视图2.1 视图的介绍2.2 视图的创建2.3 视图的修改2.3.1 方式一 create or replace view2.3.2 方式二 alter view 2.4 视图的删除2.5 查看视图 3 练习4 视图的一些其他操作4.1 插入数据4.2 修改数据4.3 删除数据 1 事务
TCL transaction control language事务控制语言
1.1 事务的介绍 ACID 原子性Atomicity原子性要求事务是不可分割的最小工作单位要么全部操作成功要么全部操作失败回滚。即要么所有操作都执行要么都不执行不存在部分执行的情况。 一致性Consistency 一致性保证了事务在执行前后数据库的状态必须是一致的。在事务开始之前和结束之后数据库应该仍然保持一致性约束不会破坏数据完整性和业务规则。 隔离性Isolation 隔离性指的是多个事务并发执行时事务之间应该相互隔离使得每个事务感觉不到其他事务的存在。隔离性能够防止并发事务之间出现数据混乱、并发读取数据的问题。 持久性Durability 持久性确保一旦事务提交其所做的修改将永久保存在数据库中即使系统发生故障或重新启动修改的数据也不会丢失。
1.2 演示事务的使用步骤
必须先设置自动提交功能为禁用 set autocommit0;
步骤1开启事务
set autocommit0;
start transaction;步骤2编写事务中的sql语句(select insert update delete)
语句1;
语句2;
...步骤3结束事务
commit;提交事务
rollback;回滚事务show variables like autocommit;
show engines;1.2.1 事例张无忌转账500给赵敏
1.先创建一个账户表
create table account(id int primary key auto_increment,username varchar(20),balance double
);auto_increment 通常用于为表中的主键字段生成唯一的自增值。当某一列被指定为 auto_increment 时数据库系统会自动为新插入的记录分配一个唯一的递增值而不需要用户手动指定该值。
2.查看account表中的所有索引
show index from account;3.插入值
insert into account(username,balance)
values (张无忌,1000),(赵敏,1000);4.事务流程
# 开启事务
set autocommit0;
start transaction;# 编写事务的语句
update account
set balance 1000
where username 张无忌;update account
set balance 1000
where username 赵敏;#结束事务
commit;5.回滚事务
# 开启事务
set autocommit0;
start transaction;# 编写事务的语句
update account
set balance 1000
where username 张无忌;update account
set balance 1000
where username 赵敏;#回滚事务
rollback;1.3 事务并发问题的介绍 脏读Dirty Read脏读指在一个事务中读取了另一个事务未提交的数据如果另一个事务在后续发生回滚操作那么当前事务读取到的数据就是“脏”的。为避免脏读可以使用 READ_COMMITTED 隔离级别它规定一个事务只能读取到已经提交的数据。 不可重复读Non-Repeatable Read不可重复读指在同一事务中由于其他事务修改了数据导致一个事务两次读取相同的记录时结果不一致。为避免不可重复读可以使用 REPEATABLE_READ 隔离级别它确保在一个事务中多次读取同一数据时得到的结果是一致的。 幻读Phantom Read幻读指在同一事务内由于其他事务插入、更新或删除数据导致同一查询操作多次返回不同数量的数据行。为避免幻读可以使用 SERIALIZABLE 隔离级别它规定事务之间是串行执行的确保在事务执行期间其他事务无法对数据进行操作从而避免幻读问题。
可以通过设置隔离级别避免以上现象发生
事务的隔离级别
脏毒不可重复读幻读read uncommitted✓✓✓read committed×✓✓repeatable read××✓serializable×××
1.4 删除在事务中的区别
# 演示delete
set autocommit 0;
start transaction;
delete from account;
rollback;# 演示truncate
set autocommit0;
start transaction;
truncate table account;
rollback;2 视图
2.1 视图的介绍
MYSQL从5.0.1版本开始提供视图功能。一种虚拟存在的表行和列的数据来自定义视图的查询中使用的表并且是在使用视图时动态生成的只保存了sql逻辑不保存查询结果。不占据物理空间。
例查询姓张的同学的姓名和专业名 原始方法
select stuname,majorname
from stuinfo s
inner join major m
on s.majorId m.id
where s.stuname 张%;视图方法
create view v1
as
select stuname,majorname
from stuinfo s
inner join major m
on s.majorid m.id;select *
from v1
where stuname like 张%;2.2 视图的创建
例1查询姓名中包含a字符的员工名、部门名和工种信息
# 创建视图
create view myv1
as
select last_name,department_name,job_title
from employees e
join departments d on e.department_id d.department_id
join jobs j on e.job_id j.job_id;# 查询视图
select *
from myv1
where last_name like %a;例2查询各部门的平均工资级别
# 创建视图查看每个部门的平均工资
create view myv2
as
select department_id,avg(salary) as ag
from employees e
group by department_id;# 根据视图和job_grades查询工资级别
select myv2.*,grade_level
from myv2
join job_grades on ag between lowest_sal and highest_sal;例3查询平均工资最低的部门信息
# 创建视图查看部门的平均工资
# 例2中已创建# 在视图中查询工资最低的部门信息
select d.*
from myv2
join departments d
on myv2.department_id d.department_id
where ag (select min(ag)from myv2
);还有更简单的做法但是这个没有显示出部门的所有信息
select *
from myv2
order by ag asc
limit 1;例4 查询平均工资最低的部门名和工资
create view myv3
as
select *
from myv2
order by ag asc
limit 1;select department_name,ag
from myv3
join departments d
on d.department_id myv3.department_id;视图的好处 1.重用sql语句 2.简化复杂的sql操作不必知道它的查询细节 3.保护数据提高安全性
2.3 视图的修改
2.3.1 方式一 create or replace view
create or replace view 视图名
as
查询语句;2.3.2 方式二 alter view
alter view 视图名
as
查询语句;2.4 视图的删除
drop view myv1,myv2,myv3;2.5 查看视图
#方式一
desc myv3;#方式二 效果不好
show create view myv3;3 练习
一、创建视图 emp_v1,要求查询电话号码以‘011’开头的员工姓名和工资、邮箱
create or replace view emp_v1
as
select last_name,salary,email,phone_number
from employees;select last_name,salary,email
from emp_v1
where phone_number like 011%;二、创建视图 emp_v2要求查询部门的最高工资高于 12000 的部门信息
# 创建视图查询部门的最高工资高于12000的id有哪些
create or replace view emp_v2
as
select department_id,max(salary) as m_s
from employees
group by department_id
having m_s 12000;# 查询视图部门id的部门信息
select d.*,emp_v2.m_s
from emp_v2
join departments d on emp_v2.department_id d.department_id;4 视图的一些其他操作
4.1 插入数据
insert into myv1
values ( ),( ),( );4.2 修改数据
update myv1
set last_name
where last_name ;4.3 删除数据
delete from myv1
where last_name ;学的好疲惫坚持一下