MySQL 10章_视图、事务
一、 视图:
视图(view)是保存了查询语句的一种数据库对象,其数据来源是查询语句对应的数据表,他的结果与数据表查询的结果一样也是一张虚拟的数据表
1、 为什么需要视图:
1) 不同的用户关心的数据可能是不相同的,每个用户可以将关心的数据的查询语句定义为视图,方便以后使用
2) 针对一些不能被所有用户访问的数据可以通过创建视图只公开不需要保密的数据,提高数据的安全性
3) 针对复杂的查询,可以将它保存为视图,以后可以简化查询的操作 2、 视图的创建:
语法:
CREATE VIEW<视图名称>AS<查询语句>
举例:
CREATE VIEW vw_score AS SELECT id 编号,student_no 学生编号,subject_id 课程编号,exam_date 考试日期 FROM tb_score;
3、 视图的使用:查询视图与查询数据表的操作完全相同
SELECT * FROM vw_score WHERE 课程编号 = 2; -- 课程编号为2的成绩 二、 事务:
1、 什么是事务?
当在执行一些重要的增删改时,往往需要将他们当作一个整体来看待,要么全部执行,要么全部不执行,
当所有操作都正常结束后可以通过commit语句提交,当其中的全部或部分操作失败后,可以通过rollback语句回滚
2、 如何使用事务:事务操作的流程
1) 需要设置数据库管理系统的提交方式为“手动提交“。
SET AUTOCOMMIT = {0|1};
0表示手动提交,1表示自动体提交,MySQL默认的提交方式为“自动提交“
2) 开启事务
START TRANSACTION;
3) 执行目标代码:如,转账就是执行两个update操作
4) 若目标代码没有发生异常,执行提交操作(commit),发生异常执行回滚操作(rollback)
/*举例:模拟一个转账的事务操作,以Java代码的异常处理模板为例,演示事务操作的流程
try {
// 试图执行的目标代码,
SET AUTOCOMMIT = 0;
START TRANSACTION;
UPDATE tb_bank SET amount = amount - 100 WHERE card_no = ;
UPDATE tb_bank SET amount = amount + 100 WHERE card_no = ;
COMMIT;
} catch {
//当目标代码发生异常时会执行的代码块。
ROLLBACK;
} finally {
//不管目标代码是否发生异常,都会被执行的代码块
SET AUTOCOMMIT = 1;
}*/
3、 事务的4个特性:ACID
1) 原子性(Atomicity):将事务中的所有操作当作一个整体来看待,要么全部执行,要么不执行
2) 一致性(consistency):事务操作的前后数据要保持一致,如:转账前后的总金额要相同,
3) 隔离性(isolation):事务之间时相互独立的,一个事务不能依赖其他事务执行结果而发生改变
4) 永久性(durability):事务完成后的数据需要永久保存起来
4、 事务的隔离级别:
在SQL规范中针对事务隔离级别设置了4个级别,每一种数据库管理系统都支持这4个级别,所不同的是,默认级别有差异
1) 读未提交(READ UNCOMMITTED):当一个事务正在读取某个数据但还没有提交之前,其他的事务允许去访问该数据。(Oracle的默认值)
2) 读已提交(READ COMMITTED):当一个事务正在读取某个数据但还没有提交之前,不允许其他事务访问该数据,只有前面的事务提交了数据后,才能访问。
3) 可重复读(REPEATABLE READ):当一个事务正在修某个数据但还没有提交之前,其他的事务允许去访问该数据。(MySQL的默认值)
4) 串行化(序列化)(SERIALIZABLE):所有的事务不管是读还是写数据,都必须要依次访问。
注:以上的四个级别依次等级提高,效率越低,但实际应用过程中要根据项目的需求寻找一个安全和效率平衡点作为最佳方案。
5、 查看事务的隔离级别:
通过查看MySQL数据库中保存的事务隔离级别变量来完成,范围有两个:全局(global)、当前会话(session)
-- 当前会话隔离级别
SELECT @@session.tx_isolation;
-- 全局隔离级别
SELECT @@global.tx_isolation;
6、 修改事务隔离级别:
1) 通过SQL语句完成修改
语法:
SET {global | session} transaction isolation level {事务隔离级别}; 2) 通过修改MySQL数据库管理系统的配置文件完成修改:
a、 找到MySQL安装路径下的my.ini文件
b、 打开文件找到[mysqld]区域,添加事务隔离级别的配置。
如:transation-isolation = READ-COMMITTED;
注:设置完成后是全局效果,所有的事务隔离级别都被修改
MySQL 10章_视图、事务的更多相关文章
- MySQL 05章_模糊查询和聚合函数
在之前的查询都需要对查询的关机中进行“精确”.“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”.“完整”的关键字, 那么就需要提供一种不太严格的查询方式, ...
- MySQL 11章_索引、触发器
一. 索引: . 为什么要使用索引: 一本书需要目录能快速定位到寻找的内容,同理,数据表中的数据很多时候也可以为他们创建相应的“目录”,称为索引,当创建索引后查询数据也会更加高效 . Mysql中的索 ...
- C Primer Plus_第10章_数组和指针_编程练习
1. /*rain.c 针对若干年的降水量数据,计算年降水总量.年降水平均量,以及月降水平均量*/ #include <stdio.h> #define MONTHS 12 #define ...
- 04747_Java语言程序设计(一)_第10章_网络与数据库编程基础
例10.1说明InetAddress类的用法的应用程序. public class Example10_1 { public static void main(String args[]) { try ...
- 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串
字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...
- 04737_C++程序设计_第10章_面向对象设计实例
10.6.2 使用包含的参考程序及运行结果. 头文件cpp10.h 源文件cpp10.cpp 源文件Find10.cpp 头文件cpp10.h #if ! defined(CPP10_H) #defi ...
- MySQL 08章_数据库设计
一. 关系模型与对象模型之间的对应关系 序号 关系模型:数据库 对象模型:java程序 1 数据表table 实体entity:特殊的java类 2 字段field 属性attribute/字段fie ...
- mysql 09章_存储过程和函数
一. 函数和存储过程的相同点: 函数和存储过程都是事先预编译并保存在数据库中的特殊的数据库对象, 需要执行相应功能时就可以直接通过“函数名”.“存储过程”调用其中的代码,以提高执行效率和代码的复用性. ...
- MySQL 07章_子查询
子查询就是查询中还可以嵌套其他的查询,通常是内层查询的结果作为外层查询的条件来使用 执行循序,自内向外依次执行 一.内层查询返回“单列单行”的结果 -- 1.查询宋江的出生日期 SELECT TIME ...
随机推荐
- PHP面试 PHP基础知识 五(自定义函数和内部函数)
自定义函数 变量的作用域和静态变量 变量的作用域:变量的作用域也成为变量的范围,变量的范围即它定义上的上下文背景(也就是它生效的范围). 大部分的PHP变量只有一个单独的范围.这个单独的范围跨度同样包 ...
- CH1201 最大子序和 (单调队列)
题目链接: AcWing 牛客 题目描述 输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7 当 ...
- 第四记 Java异常
Java异常结构图 Java所有异常都是从Throwable继承而来,Throwable有两个子类,Error与Exception. Error是错误,对于所有的编译时期的错误以及系统错误都是通过Er ...
- windows平板软件开机自启动+霸屏的操作方法
转载(忘了地址) 很好很强大.成功亲测 使用你自己的账号(最好是管理员权限的账号)登录Windows,然后添加一个给其他人使用的账户(假设为other),注意一定要为other设置密码. 运行 ...
- C语言结构体和函数
#include <stdio.h> struct Person { char *name; }; void change1(struct Person p); void change2( ...
- Linux下的Ngnix服务器部署静态页
一.安装FTP vsftpd 的名字代表”very secure FTP daemon”, 安全是它的开发者 Chris Evans 考虑的首要问题之一.在这个 FTP 服务器设计开发的最开始的时候, ...
- “使用Adobe Reader XI打开PDF文件,左侧无法显示导航列表”解决方法
在Word中将文档另存为PDF格式之后,再使用Adobe Reader XI打开,没有左侧导航列表: 解决步骤: 1.在word另存为时,在另存为对话框中,点击如下图所示的“选项” 2.在弹出的对话框 ...
- python_django_urls基础配置
url配置:请求地址与views函数的匹配 首先,指定根级url配置文件,默认为setting.py中的ROOT_URLCONF='项目名.urls'(俺们也不用去修改啥) 我们urls有两个,一个是 ...
- h5 app 设置全屏
h5 app的全屏和沉浸式状态栏是不一样的 全屏模式 常见使用场景:如果页面是全屏游戏,一般会直接让状态栏消失,也就是页面全屏.webview高度全屏了,状态栏没有了.写法: 终端支持:没有终端类型限 ...
- Js数据类型和运算符
1.数据类型 原始类型:数值 字符串 布尔值: 复杂类型:对象: 数值(number) 特殊的数值:NaN,NaN不等于任何 ...