栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

mysql数据库(五)事务,PowerDesigner 建模工具

mysql数据库(五)事务,PowerDesigner 建模工具

一. 事务定义和基础 1. 事务:事务是一条 或 多条sql语句, 这些sql要么都执行要么都不执行    例:转账: 
        张三  给 李四  转账 1000元 ,这时数据库应该的操作?
         update account set balance = balance - 1000 
                     where name = '张三';
         update account set balance = balance + 1000
                     where name = '李四';
      这两条sql语句要么都执行要么都不执行,不然实现不了这个操作。    注意:(1)mysql数据库的事务 是自动提交 ,  oracle数据库是手动提交               (2)show variables like 'autocommit';  显示提交方式。                (3)在正式开发中事务必须改成手动提交 2.事务的sql语句:         (1)begin;
                start transaction;开启一个事务
       (2)set autocommit = 0; 设置手动提交
       (3)savepoint a; 设置保存点
       (4)commit;执行
       (5)rollback to a;回滚至保护点a     注意:手动提交的好处:手动提交更灵活,可以控制回滚和提交,保证了数据的安                全和程序的灵活。 二.事务的特性       1.原子性:     
            事务是最小的执行单位,不可在分,
            事务由一条 或多条sql语句组成一个完整的事务
            这些sql语句组成后不可以拆分;
            那么这个事务也不可在分
            
        2.一致性:     
            |-- 事务中包含的sql语句在修改之前 和修改之后的状态要一致
            
            ||-- 两个表上: 
              体现在持久外键的表上,和主表的关系;
              如果主表的主键值修改了,那么从表的外键字段值要跟主表的主键值保持一致;        3.持久性:
             如果一个事务 执行了 commit操作
             那么它对数据库的影响永久有效,不可回滚;
        
        4.隔离性:  互斥的
            指的是并发情况下的事务,
            事务和事务之间在执行时 相互不干扰,
            具有互斥性; 三.MySQL中的四个隔离级别:      1.读未提交数据  read uncommited 
     2.读已提交数据  read commited   oracle默认的
     3.可重复读 repeatable read   mysql默认的
     4.串行化 serialize 假设数据库的事务不具备 隔离性,那么就会出现事务并发问题 : 1.脏读
         现在有 T1事务 , T2事务 两个事务, 假设T1修改了一条记录, 没提交 ,这时T2读取了这条记录, 这时T1 遇到问题,没有执行,回滚了,这时T2 读取到的数据9000,和数据库表中的数据 不一致,那T2读到的数据就是脏数据
     例:
        假设当前余额为10000,张三修改了余额改成了 9000  , 没提交,这时李四 读取了这条记录 为 9000 , 这时张三遇到问题,回滚了,余额为10000 ,那么李四读到的数据是 9000 , 和数据库中数据不一致,那么李四读到的数据就是脏数据。 2.不可重复读          体现的是update操作, commit就是事务的终结,即 执行
        假设有两个事务 T1 , T2 ,假设T1 一直 读取了 一条记录,没提交 ,没读完但是在T1读取 这条记录时,T2事务进来了,修改了记录并提交了,那么T1在多次读取数据结果时不一致,那么就是不可重复读  3.幻读  ( insert into , delete语句) 
         两个事务T1 ,T2, T1读取了当前表的总记录数10条记录;  没提交, 这时T2 insert into (或者delete)记录  T1 又读取一边发现总记录变成11条记录了,T1两次读取的总记录数一直吗? 不一致,那么就是幻读 隔离级别的作用是用来解决 事务的并发问题: 查看mysql默认的隔离级别:  select @@tx_isolation;   运行结果:repeatable -read 修改mysql的隔离级别为:读未提交数据
                 set session transaction isolation level read uncommitted;   (1)如果mysql中的隔离级别是读未提交数据数据 就会出现 脏读,不可重复读 ,幻读
     
(2)如果mysql中的隔离级别是 读已提交数据,会解决脏读,但是会出现不可重复读  和幻读
     
(3)如果mysql的隔离级别是 可重复读,可以解决 脏读,不可重复读, 会出现幻读
    
(4)如果mysql的隔离级别是 串行化 ,可以解决 脏读, 不可重复读, 幻读

数据库中 处理事务并发问题的方式有几种: 
      1.默认是通过隔离级别来解决
      2.通过锁的方式:
         (1)悲观锁: select * from  xxx for update;                悲观锁:
                    共享锁: 读锁 select  ,一个门多个钥匙开
                    排他锁: 写锁 insert into ,delete ,update 一个门,一个钥匙。
         (2)乐观锁: 没有锁的概念 使用版本号 和 时间戳来判断 四.PowerDesigner: 建模工具         1.E-R : Entity 实体 public class Person 
          Relationship  关系,可以画实体关系图 , 属于概念图    Conceptual
        2.物理数据图: 针对数据库表关系的图 ,就是Navicat中的图
                两种方式: 使用Navcat 画图,导出sql脚本;
                           使用PowerDesigner软件,画物理图,生成sql脚本         画: 包括 一对一, 一对多, 多对多.
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号