事务

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;

模拟 银行转账!

--   创建数据库
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;  -- 恢复自动提交

1.概念

一条或者多条sql语句的集合!
 事务:就是一堆操作的集合,他们同生共死。要么都执行成功,要么都执行失败
2.事务的特性  ACID
  A:原子性  完整的,不可分割的

  原子性 (Atomicity):在事务中的操作,要么都执行,要么都不执行!

C: 一致性  事务执行完毕后,数据的状态是一致的()

  一致性(Consistency):事务必须保证数据库从一个一致性的状态变成另一个一致性的状态!

I: ISOLation 隔离性  两个事务执行互不影响

  隔离性(Isolation):每个事务之间互不干扰!哪怕是并发执行也不干扰!

D: 永久性  事务执行完后,对数据的影响是永久的。

  持久性(Durability):事务一旦被改变,那么对数据库中数据的影响是永久性的!

3.事务操作的关键字
  自动提交事务开关set autocommit=1
  开始事务 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;

模拟 银行转账!

--   创建数据库
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;  -- 恢复自动提交

            视图

1.视图: 就是一张虚拟表,本质上存储的是一对SQL的集合

--  视图 是一张虚拟的表
   01.表示一张表的部分数据或者是多张表的综合数据!
   02.结构和数据都是建立在对真表的查询基础之上的!
   03.视图中存放的数据其实就是对真实表的引用!
     对视图中的数据进行添加,更新删除都会影响到真实的表!
   04.一个真实的表可以创建N个视图!
   05.如果视图关联了多表,不允许增 删!单表可以增删改
   06.视图一般都是使用查询!

2.定义视图的语法:
create view VW_stulist(VW_视图的功能)
as
sql语句
 小Tip:当多表中有同名列的时候,在视图这个虚拟表中,只能有一列。手工指定该列是哪个表的

3.视图的使用 和检索基本表一样,直接通过select
select * from VW_stulist

4.删除视图
drop view 视图名
drop table
drop database
drop index
drop constraint
归根结底:drop  删除是结构   delete 删除数据

5.查看所有库所有视图

5.1.切换到系统数据库
  use information_schema

5.2.select * from views \G;

6.查看当前库的所有视图
   show tables status where comment='view'

7.视图注意事项
1)视图可以查询多表数据
2)视图可以嵌套
3)update,insert,delete不能封装成视图内容,通过图形化界面可以操作数据(操作视图数据,影响的是基本表)。
4)删除视图数据的时候,有一定的限定,数据结果来源于多表的时候,不能删除

--  创建一个视图  只获取 学生姓名 编号 以及考试成绩
CREATE  VIEW view_student_result
AS
SELECT s.studentNo 学生编号,studentName 学生姓名,
studentResult 考试成绩
FROM  student s,result r
WHERE s.`studentNo`=r.`studentNo`
--  查询视图中的内容
SELECT * FROM view_student_result
-- 查询mysql数据库中所有的视图
SELECT * FROM information_schema.views;
--  删除视图
DROP  VIEW view_student_result;

--  创建一个表的视图  学生姓名,地址,手机号
CREATE VIEW  view_student
AS
SELECT  studentName 学生姓名,address 地址,phone 手机号
FROM  student

-- 查询视图

SELECT  * FROM view_student

MySQL的事务和视图的更多相关文章

  1. Mysql的事务、视图、索引、备份和恢复

    事务 事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须具备四个属性.即:原子性.一致性.隔离性.持久性,这些特性通常简称为ACID.   原子性(Atomicity) 事务是不可分割的 ...

  2. MySQL(二)--事务与视图

    一.事务 1.提交 2.回滚 3.ACID特性 二.视图 1.创建视图 2.删除视图 3.更新视图 4.使用视图 三.子查询 1. 使用子查询 2. 标量子查询 3. 关联子查询 一.事务 在 RDB ...

  3. Mysql数据库的数据类型、索引、锁、事务和视图

    Mysql数据库的数据类型.索引.锁.事务和视图 数据的类型 1)数据类型: 数据长什么样? 数据需要多少空间来存放? 系统内置数据类型和用户定义数据类型 2)MySql 支持多种列类型: 数值类型 ...

  4. MySQL 事务、视图、索引

    一.事务(Transaction) 1.1 什么是事务? SQL中,事务是指将一系列数据操作捆绑成为一个整体进行统一管理. 如果一个事务执行成功,该事务中进行的所有数据均会提交,称为数据库中的永久组成 ...

  5. MySQL的事务

    MySQL的事务 1.事务:事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行. 2.事务具备的四个特性(简称为ACID性): (1)原子性(Atomic ...

  6. java数据库编程之事务、视图、索引、备份、恢复

    第五章:事务.视图.索引.备份和恢复 5.1:事务 事务的概念:事务(transcation)是讲一系列数据操作捆绑成为一个整体进行统计管理. 如果某一事务执行成功了,则该事务进行操作的所有数据将会提 ...

  7. 知识点:Mysql 基本用法之视图

    视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时 ...

  8. MySQL:事务的隔离性

    [参考文章]:数据库的事务特性及隔离级别 1. 事务的四大特性 1.1 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用 ...

  9. mysql 锁相关的视图(未整理)

    mysql 锁相关的视图 查看事务,以及事务对应的线程ID   如果发生堵塞.死锁等可以执行kill  线程ID  杀死线程      kill  199 SELECT * FROM informat ...

随机推荐

  1. Python实例31[批量对目录下文件重命名]

    经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:例如: 修改前:[大家网]Mac OS X for Uni ...

  2. 【shell】sed指定追加模式空间的次数

    最近遇到一个文本复制的场景,需要把文本的每一行都重复输出三次. 这个用awk或者sed实现都还是很简单的. sed代码: [root]$ seq | sed '{h;G;G}' 现在的问题是,如果每行 ...

  3. Linux 系统磁盘空间占满,df 和 du 结果不一致

    服务器运行一段时间后df查看磁盘剩余空间不足,通过du统计发现被几个文件占用,遂删除之.过了一段时间磁盘空间再次不足,通过du统计却找不到那么多大文件.搜索后才得知原因:文件删除后空间没有释放,du统 ...

  4. 洛谷 P5022 旅行——题解

    发现大部分题解都是O(n^2)的复杂度,这里分享一个O(n)复杂度的方法. 题目传送 首先前60%的情况,图是一棵无根树,只要从1开始DFS,每次贪心走点的编号最小的点就行了.(为什么?因为当走到一个 ...

  5. 买SD卡和TF卡要买U3和A2协议的

    A3 最低平稳写入30M/s

  6. Spring Boot教程(二十二)使用Swagger2构建强大的RESTful API文档(1)

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  7. Spring Boot教程(二)关于RabbitMQ服务器整合

    准备工作 15min IDEA maven 3.0 在开始构建项目之前,机器需要安装rabbitmq,你可以去官网下载,http://www.rabbitmq.com/download.html ,如 ...

  8. HDU1847--Good Luck in CET-4 Everybody!(SG函数)

    Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...

  9. pymysql 处理数据的几种方式

    1.表中提取数据 sql = "SELECT * FROM table WHERE name='%s'AND time='%s'" % (name,time)多个选择条件用AND连 ...

  10. leetcode-mid-sorting and searching-34 Search for a Range

    mycode   63.98% class Solution(object): def searchRange(self, nums, target): """ :typ ...