zoukankan      html  css  js  c++  java
  • python 基础 9.2 mysql 事务

    一. mysql 事务
       MySQL 事务主要用于处理操作量大,复杂度高的数据。比如,你操作一个数据库,公司的一个员工离职了,你要在数据库中删除它的资料,也要删除该人员相关的,比如邮箱,个人资产等这些数据库操作语言就构成了一个事务。在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务,所以很多情况下我们都使用innodb引擎。
       事务处理可以用来维护数据库的完整性,保证成批的SQL 语句要么全部执行,要么全部不执行。
       一般来说,事务是必须满足4个条件(ACID):Atomicity(原子性),Consistency(稳定性),isolation(隔离性),Durability(可靠性)
    1.事务的原子性:一组事务,要么成功;要么撤回。
    2.稳定性:有非法数据(外键约束之类),事务撤回。
    3.隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
    4.可靠性:软,硬件崩溃后,Innodb数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit 选项决定什么时候把事务保存到日志里。而mysql在默认的情况下,他是把每个select,insert,update,delete等做为一个事务的,登陆mysql服务器,进入mysql,执行以下命令:
    mysql> show variables like 'auto%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | auto_increment_increment | 1     |
    | auto_increment_offset    | 1     |
    | autocommit               | ON    |
    | automatic_sp_privileges  | ON    |
    +--------------------------+-------+
    4 rows in set (0.10 sec)
     
    如上所示:有一个参数autocommit 就是自动提交的意思,没执行一个mysql的select,insert,update等操作,就会进行自动提交。如果把该选项关闭,我们就可以每次执行完一次代码就需要进行手动提交,connect对象给我们提供了两种办法来操作提交数据。
     
     
    二. mysql事务的方法
    commit():提交当前事务,如果是支持事务的数据库执行增删改查后没有commit则数据库默认回滚,白操作了
    rollback():取消当前事务
     
    下面我们来看个例子:
    我们先创建一个员工表:
    create table employees (
            emp_no int not null auto_increment,
            emp_name varchar(16) not null,
            gender enum('M', 'F') not null,
            hire_date date not null,
            primary key (emp_no)
            );
     
    其中,emp_no 为员工id,为主键且唯一
              emp_name为:员工名字
              fender为:性别,只有M 和F 两种选择
              hire_date为:雇佣时间
            
    为了实验结果,我们插入几条数据:
    insert into employees(emp_no, emp_name, gender, hire_date) values(1001, 'lingjiang', 'M', '2015-04-01');
    insert into employees(emp_no, emp_name, gender, hire_date) values(1002, 'xiang', 'M', '2015-04-01');
    insert into employees(emp_no, emp_name, gender, hire_date) values(1003, 'shang', 'M', '2015-04-01');
     
    mysql> select *from employees;
    +--------+-----------+--------+------------+
    | emp_no | emp_name  | gender | hire_date  |
    +--------+-----------+--------+------------+
    |   1001 | lingjiang | M      | 2015-04-01 |
    |   1002 | xiang     | M      | 2015-04-01 |
    |   1003 | shang     | M      | 2015-04-01 |
    +--------+-----------+--------+------------+
    3 rows in set (0.00 sec)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    三数之和
    167
    二分搜索树
    687
    索引堆
    二分查找 leetcode704
    leetcode 56合并区间 java
    leetcode 1046
    堆的数据结构java
    leetcode 493
  • 原文地址:https://www.cnblogs.com/lzcys8868/p/7869082.html
Copyright © 2011-2022 走看看