当前位置: 首页 > news >正文

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)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/lzcys8868/p/7869082.html

相关文章:

  • RAC同单实例物理备库的switchover
  • SmoothWall的小企业应用
  • AWS简介与历史
  • FOSCommentBundle功能包:设置Doctrine ORM映射(投票)
  • 一个16年毕业生所经历的php面试
  • svn1.5+TortoiseSVN1.5+VisualSVN1.5
  • sed常用
  • sublime配置文件
  • 性能测试之手机号码python生成方式
  • centos7 安装 keepalived
  • nginx访问http80端口跳转https443端口
  • 10.6 监控io性能;10.7 free;10.8 ps;10.9 查看网络状态;10.10 抓包
  • shell $$ 的详解
  • Struts1.x 跨站脚本(XSS)漏洞的解决
  • 综合应用WPF/WCF/WF/LINQ之三十:代码生成器之DBMLToDAL
  • 10个确保微服务与容器安全的最佳实践
  • Akka系列(七):Actor持久化之Akka persistence
  • Angular Elements 及其运作原理
  • Java到底能干嘛?
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • laravel5.5 视图共享数据
  • MySQL用户中的%到底包不包括localhost?
  • overflow: hidden IE7无效
  • 官方解决所有 npm 全局安装权限问题
  • 记录:CentOS7.2配置LNMP环境记录
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 看域名解析域名安全对SEO的影响
  • 区块链共识机制优缺点对比都是什么
  • 如何设计一个比特币钱包服务
  • 听说你叫Java(二)–Servlet请求
  • 通过几道题目学习二叉搜索树
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • Spring Batch JSON 支持
  • #《AI中文版》V3 第 1 章 概述
  • #DBA杂记1
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (bean配置类的注解开发)学习Spring的第十三天
  • (转) Android中ViewStub组件使用
  • (转)编辑寄语:因为爱心,所以美丽
  • .Net 代码性能 - (1)
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [C#]扩展方法
  • [C++] 统计程序耗时
  • [C++进阶篇]STL中vector的使用
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [HJ73 计算日期到天数转换]
  • [IE编程] IE中使网页元素进入编辑模式
  • [IE编程] 如何编程清除IE缓存
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)
  • [office] 在Excel2010中设定某些单元格数据不参与排序的方法介绍 #其他#知识分享#笔记
  • [Oh My C++ Diary]\t \n \r的用法
  • [Spark、hadoop]Spark Streaming整合kafka实战
  • [Unity]关于iOS申请因为Advertising Identifier问题被拒绝的解决方法