MySQL的事务和视图
事务
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的事务和视图的更多相关文章
- Mysql的事务、视图、索引、备份和恢复
事务 事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须具备四个属性.即:原子性.一致性.隔离性.持久性,这些特性通常简称为ACID. 原子性(Atomicity) 事务是不可分割的 ...
- MySQL(二)--事务与视图
一.事务 1.提交 2.回滚 3.ACID特性 二.视图 1.创建视图 2.删除视图 3.更新视图 4.使用视图 三.子查询 1. 使用子查询 2. 标量子查询 3. 关联子查询 一.事务 在 RDB ...
- Mysql数据库的数据类型、索引、锁、事务和视图
Mysql数据库的数据类型.索引.锁.事务和视图 数据的类型 1)数据类型: 数据长什么样? 数据需要多少空间来存放? 系统内置数据类型和用户定义数据类型 2)MySql 支持多种列类型: 数值类型 ...
- MySQL 事务、视图、索引
一.事务(Transaction) 1.1 什么是事务? SQL中,事务是指将一系列数据操作捆绑成为一个整体进行统一管理. 如果一个事务执行成功,该事务中进行的所有数据均会提交,称为数据库中的永久组成 ...
- MySQL的事务
MySQL的事务 1.事务:事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行. 2.事务具备的四个特性(简称为ACID性): (1)原子性(Atomic ...
- java数据库编程之事务、视图、索引、备份、恢复
第五章:事务.视图.索引.备份和恢复 5.1:事务 事务的概念:事务(transcation)是讲一系列数据操作捆绑成为一个整体进行统计管理. 如果某一事务执行成功了,则该事务进行操作的所有数据将会提 ...
- 知识点:Mysql 基本用法之视图
视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时 ...
- MySQL:事务的隔离性
[参考文章]:数据库的事务特性及隔离级别 1. 事务的四大特性 1.1 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用 ...
- mysql 锁相关的视图(未整理)
mysql 锁相关的视图 查看事务,以及事务对应的线程ID 如果发生堵塞.死锁等可以执行kill 线程ID 杀死线程 kill 199 SELECT * FROM informat ...
随机推荐
- SpringBoot框架(6)--事件监听
一.场景:类与类之间的消息通信,例如创建一个对象前后做拦截,日志等等相应的事件处理. 二.事件监听步骤 (1)自定义事件继承ApplicationEvent抽象类 (2)自定义事件监听器,一般实现Ap ...
- 【leetcode】1228.Missing Number In Arithmetic Progression
题目如下: 解题思路:题目很简单.先对数组排序,根据最大值和最小值即可求出公差,然后遍历数组,计算相邻元素的差,如果差不等于公差,即表示数字缺失. 代码如下: class Solution(objec ...
- HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)
题目代号:HDU 1312 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/100 ...
- CSS 手动画热销小图标
效果图 HTML 标签 <div class="main"> <div class="small"> <div class=&qu ...
- xwiki安装部署
环境介绍 http://aiushtha-mybook.stor.sinaapp.com/xwiki/xwiki%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9 ...
- [BZOJ4011][HNOI2015]落忆枫音:拓扑排序+容斥原理
分析 又是一个有故事的题目背景.作为玩过原作的人,看题目背景都快看哭了ToT.强烈安利本境系列,话说SP-time的新作要咕到什么时候啊. 好像扯远了嘛不管了. 一句话题意就是求一个DAG再加上一条有 ...
- 3D Computer Grapihcs Using OpenGL - 16 使用DrawElementsInstanced绘制立方体
我们使用15节学到的知识来绘制14节的立方体. 在第14节我们使用了两次glDrawElements实现了OpenGL实例化,发现这样仍然不太方便,如果需要绘制成千上万的立方体,就需要手写成千上万次的 ...
- Spring Cloud Stream教程(五)编程模型
本节介绍Spring Cloud Stream的编程模型.Spring Cloud Stream提供了许多预定义的注释,用于声明绑定的输入和输出通道,以及如何收听频道. 声明和绑定频道 触发绑定@En ...
- 常用的vi快捷方式
一般情况来说: 0代表行首,$代表行末 $,G代表最后一行 光标移动 0 移动到本行最前面 $ 移动到本行最后 G 移动文件最后一行 nG 移动到文件第n行 gg 移动到文件第一行 n[space]移 ...
- ScvQ的技术栈
前端:spring mybatis hibernate struts2 SpringMVC echache quartz 后台:servlet jsp jdbc io html css javascr ...