MYSQL基础7——视图、数据库建模(powerDesinger)、事务(脏读)

#视图:在真实表上面构建的一张虚表
#有dept、emp。要求查看所有的员工信心,还包括部门信息
SELECT * FROM dept d INNER JOIN emp e ON d.`id`=e.`deptId`;

#创建视图语法:create view 视图名 as 查询语句
CREATE VIEW view_all
AS SELECT e.`id` AS empID, e.`empName`,e.`salary`,e.`phone`,d.`deptName` 
FROM dept d INNER JOIN emp e ON d.`id`=e.`deptId`;

SELECT * FROM view_all;
#删除视图:drop view 视图名
DROP VIEW view_all;

#查询某一视图中的数据
SELECT * FROM view_all WHERE empID=1;

#删除视图中的某一条数据(局限性,建议:视图不适用于删除数据(虚表))
CREATE VIEW view_emp AS SELECT * FROM emp;
DELETE FROM view_emp WHERE id=1;

#往视图中添加数据(视图中添加进去了,实表中也添加进去了)
INSERT INTO view_emp SET empName='王二麻子'
SELECT * FROM view_emp;

#修改视图(视图修改了,实表也修改了)
UPDATE `view_emp` SET empName='李的骄傲' WHERE id=7;

#视图的应用场景:只做查询功能等

#---------------------------------------------------------------------

#数据库建模(powerDesinger)
#file————>new Model--->physical data model

#-----------------------------事务----------------------------------------

#小白给小黑转20000
UPDATE `account`SET money=money-20000 WHERE bankNo='119';

UPDATE `account`SET money=money+20000 WHERE bankNo='911';

#小兰给小黑30000        
UPDATE `account`SET money=money-30000 WHERE bankNo='110';

UPDATE `account`SET money=money+30000 WHERE bankNo='911';

#事务: 
    #什么是事务?:多组操作要么全部成功,要么全部失败
        #开启事务: start transaction;
        #回滚事务:(如果事务提交后,不能够回滚):rollback;
        #提交事务:commit;

        
    #事务的4大特性:
        #原子性(automic):多组操作不能分割,必须是一个整体
        #一致性(consistent):事务操作前与事务操作后总量保持一致
        #隔离性(isolation):多个事务之间互不干扰
            #在mysql中事务有4种隔离级别:read uncommitted、read committed、
                #                     repeatable read、serializable

                
                #查看mysql软件的隔离级别:select @@tx_isolation;
                SELECT @@tx_isolation;
                
                #修改mysql软件默认的隔离级别
                SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别
                SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                
            #不同的隔离级别会引发不同的问题:
            #当MySQL事务的隔离级别为read uncommitted时,会引发脏读:
                #脏读:一个事务可以读取另一个事务未提交的数据(未commit,只是开启了事务然后半截回滚了)
                #如何结局脏读问题:可以将数据库的隔离级别改为read committed
                SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

            #虚读与幻读
            #不可重复读
        #持久性(durable):数据一旦进入库中,表中就永久存在

SELECT @@tx_isolation;

猜你喜欢

转载自blog.csdn.net/qq_41579634/article/details/87009059
今日推荐