1.什么是事务

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作 多个操作作为一个整体向系统提交,要么都执行、要么都不执行 事务是一个不可分割的工作逻辑单元

转账过程就是一个整体 它需要两条UPDATE语句来完成,这两条语句是一个整体 如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据,从而确保转账前和转账后的余额不变,即都是1001元

2.事务的特性

事务必须具备以下四个属性,简称ACID 属性

原子性(Atomicity)

事务是一个完整的操作,事务的各部操作是不可分的(原子的),要么都执行,要么都不执行

一致性(Consistency)

当事务完成时,数据必须处于一致状态

隔离性(Isolation)

并发事务之间彼此隔离。独立,他不应以任何方式依赖或影响其他事务

持久性(Durability)

事务完成后,他对数据库的修改已被永久保持

查看锁表 mysql 查看锁表的视图_sql

3.如何创建事务

MySQL中支持事务的存储引擎有InnoDB和BDB

注意:begin开启事务之后如果没有commit提交的话,在数据库里面查到的数据是修改了的,在cmd中查询数据是没有修改的,需要提交之后才真正修改,没有提交之前可以通过rollback回滚事务还原数据库里面的数据,但如果提交了之后就回滚不了

语法:

(1)开始事务

BEGIN ; 或 START TRANSACTION;

(2)提交事务

COMMIT;

(3)回滚(撤销)事务

ROLLBACK;

4.自动关闭和开启事务

默认情况下,每条单独的SQL语句视为一个事务

关闭默认提交状态后,可手动开启、关闭事务

SET autocommit = 0|1;

关闭/开启自动提交状态

值为0:关闭自动提交 值为1:开启自动提交

关闭自动提交后,从下一条SQL语句开始则开启新事务,需使用COMMIT或ROLLBACK语句结束该事务

事务部分的示例:

create database mybank;

DROP TABLE IF EXISTS BANK;
create table `bank`(
`customerName` varchar(50),
`currentMoney` decimal(10,2)
);
 
 
 insert into bank
 values('张三','1000'),('李四',1);
 
 select * from bank;


/*模拟转账*/
begin;
update bank set currentMoney = currentMoney-500
where customerName = '张三';

update bank set currentMoney = currentMoney + 500
 where customerName = '李四';
 
commit;
 rollback;
 update bank set currentMoney = currentMoney + 500
 where customerName = '张三';

update bank set currentMoney = currentMoney - 500
where customerName = '李四';

/*关闭自动提交事务*/
set autocommit = 0;

/*打开自动提交事务(默认)*/
set autocommit = 1;
事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全成功要不全失败。 
- 支持连续SQL的集体成功或集体撤销。 
- 事务是数据库在数据完整性方面的一个功能。 
- 需要利用 InnoDB 或 BDB 存储引擎,对自动提交的特性支持完成。 
- InnoDB被称为事务安全型引擎。 
-- 事务开启 
START TRANSACTION; 或者 BEGIN; 
开启事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句。 
-- 事务提交

JDX制作17. 锁表

18. 触发器

COMMIT; 
-- 事务回滚 
ROLLBACK; 
如果部分操作发生问题,映射到事务开启前。 
-- 事务的特性 
1. 原子性(
Atomicity) 
事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 
2. 一致性(Consistency) 
事务前后数据的完整性必须保持一致。 
- 事务开始和结束时,外部数据一致 
- 在整个事务过程中,操作是连续的 
3. 隔离性(Isolation) 
多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的 
数据要相互隔离。 
4. 持久性(Durability) 
一个事务一旦被提交,它对数据库中的数据改变就是永久性的。 
-- 事务的实现 
1. 要求是事务支持的表类型 
2. 执行一组相关的操作前开启事务 
3. 整组操作完成后,都成功,则提交;如果存在失败,选择回滚,则会回到事务开始的备份点。 
-- 事务的原理 
利用InnoDB的自动提交(autocommit)特性完成。 
普通的MySQL执行语句后,当前的数据提交操作均可被其他客户端可见。 
而事务是暂时关闭“自动提交”机制,需要commit提交持久化数据操作。 
-- 注意
1. 数据定义语言(DDL)语句不能被回滚,比如创建或取消数据库的语句,和创建、取消或更改表或存 
储的子程序的语句。 
2. 事务不能被嵌套 
-- 保存点 
SAVEPOINT 保存点名称 -- 设置一个事务保存点 
ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点 
RELEASE SAVEPOINT 保存点名称 -- 删除保存点 
-- InnoDB自动提交特性设置 
SET autocommit = 0|1; 0表示关闭自动提交,1表示开启自动提交。 
- 如果关闭了,那普通操作的结果对其他客户端也不可见,需要commit提交后才能持久化数据操作。 
- 也可以关闭自动提交来开启事务。但与START TRANSACTION不同的是, 
SET autocommit是永久改变服务器的设置,直到下次再次修改该设置。(针对当前连接) 
而START TRANSACTION记录开启前的状态,而一旦事务提交或回滚后就需要再次开启事务。(针 
对当前事务)

5.什么是视图

(1)视图是一张虚拟表

表示一张表的部分数据或多张表的综合数据 其结构和数据是建立在对表的查询基础上

(2)视图中不存放数据

数据存放在视图所引用的原始表中

(3)一个原始表,根据不同用户的不同需求,可以创建不同的视图

6.视图的用途

筛选表中的行 防止未经许可的用户访问敏感数据 降低数据库的复杂程度 将多个物理数据库抽象为一个逻辑数据库

7.如何创建视图

(1)使用SQL语句创建视图

语法:
create view view_name as <select 语句>;
(2)使用SQL语句删除视图
DROP VIEW [IF EXISTS] view_name;//删除前判断视图是否存在

(3)使用SQL语句查看视图

SELECT 字段1, 字段2, …… FROM view_name;

8.使用视图注意事项

视图中可以使用多个表 一个视图可以嵌套另一个视图 对视图数据进行添加、更新和删除操作直接影响所引用表中的数据 当视图数据来自多个表时,不允许添加和删除数据,一个表时可以进行修改

5.查看所有视图

USE information_schema; SELECT * FROM views\G;

使用视图修改数据会有许多限制,一般在实际开发中视图仅用作查询

示例:

/*创建视图 创建前先判断是否存在,如存在则删除*/
use house;
drop view if exists view_house;
create view view_house
as select * from hos_house;

select * from view_house;
update view_house set copy ='中关村'
where hmid ='1';

/*创建学生成绩表视图*/
use myschooltwo;
drop view if exists view_student_result;
create view view_student_result
as select s.studentName as 姓名,
s.studentNo as 学号,
r.studentResult as 成绩,
so.subjectName as 课程名称,
r.examDate as 考试日期
from student as s
inner join result as r
on s.studentNo = r.studentNo
inner join subject as so
on r.subjectNo = so.subjectNo
order by s.studentNo;

select *,count(*)from view_student_result ;

9.锁表

/* 锁表 */ 表锁定只用于防止其它客户端进行不正当地读取和写入 MyISAM 支持表锁,InnoDB 支持行锁 -- 锁定 LOCK TABLES tbl_name [AS alias] -- 解锁 UNLOCK TABLES

10.什么是索引

汉语字典中的汉字按页存放,一般都有汉语拼音目录(索引)、偏旁部首目录等 我们可以根据拼音或偏旁部首,快速查找某个字词

(1)索引是一种有效组合数据的方式,为快速查找到指定记录

(2)作用 :

大大提高数据库的检索速度 改善数据库性能

(3)MySQL索引按存储类型分类

B-树索引:InnoDB、MyISAM均支持 哈希索引

10.常用索引类型

(1)普通索引

基本索引类型 允许在定义索引的列中插入重复值和空值

(2)唯一索引

索引列数据不重复 允许有空值

(3)主键索引

主键列中的每个值是非空、唯一的 一个主键将自动创建主键索引

(4)复合索引

将多个列组合作为索引

(5)全文索引

支持值的全文查找 允许重复值和空值

(6)空间索引

对空间数据类型的列建立的索引