MySQL 事物
事务是数据库处理操作,其中执行就好像它是一个单一的一组有序的工作单元。换言之,事务将永远不会是完全的,除非在组内每个单独的操作是成功的。如果事务中的任何操作失败,整个事务将失败。
实际上,许多SQL查询组成到一个组,将执行所有这些一起作为事务的一部分。
1.概念
一条或者多条sql语句的集合! 事务:就是一堆操作的集合,他们同生共死。要么都执行成功,要么都执行失败 2.事务的特性 ACID A:原子性 完整的,不可分割的
原子性 (Atomicity):在事务中的操作,要么都执行,要么都不执行!
C: 一致性 事务执行完毕后,数据的状态是一致的()
一致性(Consistency):事务必须保证数据库从一个一致性的状态变成另一个一致性的状态!
I: ISOLation 隔离性 两个事务执行互不影响
隔离性(Isolation):每个事务之间互不干扰!哪怕是并发执行也不干扰!
D: 永久性 事务执行完后,对数据的影响是永久的。
持久性(Durability):事务一旦被改变,那么对数据库中数据的影响是永久性的!
3.事务操作的关键字 自动提交事务开关set autocommit=0 开始事务 start transaction /begin 提交事务 commit 回滚事务 rollback set autocommit=1 4.事务+++存储过程 转账的例子
DELIMITER $$
CREATE PROCEDURE usp_transfer()
BEGIN
##错误总数默认是0
DECLARE t_error INTEGER DEFAULT 0;
## continue 继续 hanlder 执行 并且对 t_error重新赋值为1
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
SET autocommit=0;
START TRANSACTION;
UPDATE bank SET balance=balance-100 WHERE cid=1;
UPDATE bank SET balance =balance+100 WHERE cid=2;
IF t_error > 0 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
SET autocommit=1;
END$$
DELIMITER ;
CALL test_sp800()
定义一个存储过程的最简易的语法是
delimiter $$
create procedure usp_stulist()
begin
select * from student
end$$
delimiter;
存储过程详解将在:http://www.cnblogs.com/lsy131479/p/8463804.html 中详细介绍
模拟 银行转账!
-- 创建数据库
CREATE DATABASE myBank;
-- 切换指定的数据库
USE myBank;
-- 创建表
CREATE TABLE IF NOT EXISTS bank(
customerName VARCHAR(10) NOT NULL COMMENT '用户名',
currentMoney DECIMAL(10,2) NOT NULL COMMENT '账户余额'
);
-- 插入数据
INSERT INTO bank VALUES('小黑',50000),('小白',500000);
-- 小黑 给小白 转账10000 -- 修改两条数据 -- 01.小黑-10000 -- 02.小白+10000
UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName='小黑';
-- 故意写错字段名称 让02 报错
UPDATE bank SET currentMoneysss=currentMoney+10000
WHERE customerName='小白';
-- 开启事务 START TRANSACTION 或者 BEGIN -- 01.02 为一个事务
BEGIN
UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName='小黑';
UPDATE bank SET currentMoneysss=currentMoney+10000
WHERE customerName='小白';
-- 事务回滚 ROLLBACK -- 提交事务 COMMIT
UPDATE bank SET currentMoney=500000 WHERE customerName='小黑'; -- 证明mysql是默认提交事务的!
SET autocommit=0(关闭事务自动提交) | 1(开启事务自动提交)
-- 关闭事务自动提交
SET autocommit=0;
BEGIN; -- 开启事务
UPDATE bank SET currentMoney=currentMoney-10000
WHERE customerName='小黑';
UPDATE bank SET currentMoney=currentMoney+10000
WHERE customerName='小白';
COMMIT; -- 手动提交事务
UPDATE bank SET currentMoney=10000;
ROLLBACK; -- 事务回滚
SET autocommit=1; -- 恢复自动提交
- Restful Objects for .NET
- 讯飞语音
- 一个数字截取引发的精度问题(四)
- 软件更新时候出现和原包名冲突
- 一个数字截取引发的精度问题(三)
- HTML生成PDF(c#)
- 一个数字截取引发的精度问题(二)
- 【独家推送】GoogLeNet构建技术分析因子的模式识别基于TensorFlow
- 一个数字截取引发的精度问题(一)
- 基于TLS1.3的微信安全通信协议mmtls介绍
- 在 WCF 中使用高效的 BinaryFormatter 序列化
- Visual Studio 2012 中的ASP.NET Web API
- gradeview可拖动效果实现
- 【Python量化投资】拟合具有非平稳特征的神经网络对股票进行预测
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解