mysql学习笔记(4)_TCL(Transaction Control Language)以及视图

##TCL(Transaction Control Language)事务控制语言


    事务简介:
        一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全不执行 
        如果其中一条语句执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事务开始以前的状态。
        若单元中的所有sql语句均正确执行,则事务被顺利执行
    存储引擎:
        myisam 
        memory
        innodb(支持事务)默认存储引擎
        .....
#查看存储引擎
show engines;

#################
###事务的ACID属性
#################

 ①、原子性(Atomicity)
 原子性是指事务是一个不可分割的单位,事务的操作要么都发生,要么都不发生
 
 ②、一致性(Consistency)
 事务必须使数据库从一个一致性状态转换成另一个一致性状态。(比如一个人给另一个人转账后的两人的金额之和是不变的)
 
 ③、隔离性(Isolation)
 一个事务的执行不被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰
 
 ④、持久性(Durability)
 持久性是指一个事务一旦提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

#事务的创建:
    隐式事务:事务没有明显的开启和结束的标记。比如insert,update,delete语句
    显式事务:事务具有明显的开启和结束的标记


#1.开启事务
set autocommit = 0;
start transaction;

#2.编写sql语句

#3.结束事务
commit;
rollback;

#delete和truncate在事务中使用的区别

#1.演示delete
set autocommit = 0;
start transaction;
delete from copy2;
rollback;
select * from copy2;

#2.演示truncate
set autocommit = 0;
start transaction;
truncate table t_course;
rollback;
select * from t_course;

#################
###视图
#################

    含义:虚拟表,和普通表一起使用
    mysql5.1版本出现的新特性,是通过表动态生成的数据
    
    应用场景: 
        1.多个地方用到同样的查询结果
        2.该查询结果使用的sql语句较复杂

#一.创建视图
    语法: 
        create view 视图名 
        as    查询语句
    视图的优点: 
        1.重用sql语句 
        2.简化复杂的sql操作 ,不必知道它的查询细节 
        3. 保护数据,提高安全性 
        
               创建语法的关键字    是否实际占用物理地址     使      用 
    视图    create view                只保存了sql逻辑            增删改查(不建议使用)    
    表        create table                保存了数据                     增删改查

 

#1.创建视图学生中年龄大于16的学生信息
create view mystudent
as
select * from t_student where age > 16;

#2.查看视图学生中年龄大于16的学生信息
select * from mystudent;

#二、视图的修改 

    语法1:create or replace view 视图名 as 查询语句
    语法2:alter view 视图名 as 查询语句 
 

#三、视图的删除

    语法: drop view 视图名, 视图名 ...
 

#四、查看视图 
desc mystudent;
show create view mystudent;


#五、视图的更新

视图不可以更新的情况:
    1.视图中包含分组函数,distinct,group by ,having ,union或者union all
    2.常量视图
    3.有子查询的视图


create view myem
as
select * from t_employee;

#1.插入视图(原始表也会有)
select * from myem;
insert into myem(id,name,job,mgr) values (1014,'Heber','人事主管',1001);

#2.修改 (对原始表也会修改)
update myem set name='Vetor' where id = 1007;

#3.删除(对原始表也会删除)
delete from myem where id = 1014;

你可能感兴趣的:(mysql)