数据库大佬讲课7

-----事务处理

在数据库中,事务由一组相关的DML或select语句,加上一个TPL语句(commit ,rollback)或一个DDL语句(create,alter,drop,truncate等)或一个DCL(grant,revoke)语句
事务特征可用四个字母的缩写表示:即ACID
--原子性(atomicity)
事务就像原子一样,不可被分割。组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况
--一致性(Consistency)
一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态
--隔离性(Isolation)
一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户中取钱,通过事务的隔离性确保账户余额的正确性
--持久性(durability)
也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可能再被回滚。

----MySQL的事务处理主要有两种方法
--1.用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit 事务提交
--2.直接用set来改变MySQL的自动提交模式
MySQL默认是自动提交的,也就是你提交一个sql,就直接执行!可以通过
show variables like '%autocommit%'查看自动事务
set autocommit =0或者off 禁止自动提交
set autocommit =1或者on 开启自动提交
来实现事务的处理
但要注意当用set autocommit =0 的时候,以后所有的sql都将作为事务处理,直到用commit确认或rollback结束,注意当结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务

----隐式结束
--隐式提交
当下列任意一种情况发生时,会发生隐式提交
-执行一个DDL(create,alter,drop,truncate,rename)语句
-执行一个DCL(grant,revoke)语句;
--隐式回滚
当下列任意一种情况发生时,会发生隐式回滚
客户端强行退出
客户端连接到服务器端异常中断
系统崩溃

---设置保存点
如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起始点,可以通过保存点(savepoint)来实现
savepoint savepointname  定义一个保存点语句
rollback to savepointname 回滚到指定保存点
练习练习
insert into dept values(103,'钱如','沈阳');
show variables like'%autocommit%';
set autocommit =off;--关闭自动事务
begin;--开始事务操作
insert into dept values(107,'钱如你我','沈阳');
commit;提交 如果用rollback 就是回滚到最开始
savepoint sp1;设置保存点回滚点
insert into dept values(108,'钱你我','沈阳');
rollback to sp1;撤销操作到spl保存点
commit;将所有修改写入数据库
rollback;这里操作不行了因为操作已经commit,不能回滚了
 start transaction;手动开启事务 相当于begin

------视图

视图是逻辑上来自一个或者多个表的数据集合
--为什么使用视图
-限制其它用户对数据库的访问,因为视图可以有选择性的现实数据库表的一部分
-容易实现复杂的查询
-对于相同的数据可以产生不同的视图
-----创建视图
创建视图语法:
create [or replace]
view view_name[(column_list)]
as select_statement;
or replace 如果所创建的视图已经存在,该选项表示修改原视图的定义
view_name 视图的名称
column_list 列名,列名的数量必须和视图所对应查询语句的列数量相等
select_statement 一条完整的select语句
例子:
create view salvu
as select empno EMPNO ,ename ENAME ,sal SALARY
from emp
where deptno=30;
从视图检索数据
从视图中检索数据,同从表中检索数据一样,只不过是只能看到视图所定义的那些列
修改视图
create or replace view 子句修改视图emp 为每个列添加别名
create view 子句中别名的顺序必须和内部查询中的列的顺序一一对应
--视图上执行DML操作
可以通过视图向基表插入数据,只要视图中不出现以下情况1.group 函数2.group by子句3.distinct 关键字
可以通过视图修改基表中数据,只要视图中不出现以下情况:1.group 函数 group by子句,distinct关键字2.使用表达式定义的列
可以通过视图向基表插入数据,只要视图中不出现以下情况:1.group函数,group by 子句,distinct 关键字2.使用表达式定义的列3.基表中未在视图中选择的其它列定义为非空并且没有默认值
---删除视图
删除视图并不会删除数据,因为视图是基于数据库中的基表的虚表

------索引

索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。
MySQL中,所有的数据类型都可以被索引
----创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引的三种方式,这三种方式分别是:
-创建表的时候创建索引
-在已经存在的表上创建索引
-使用alter table 语句来创建索引
例子:
普通索引
create table index1(
id int,
name  varchar(20),
sex boolean,
index(id)
);
创建唯一性索引
create table index2(
id int unique,
name varchar(20),
unique index index2_id(id asc)
);
创建全文索引只能创建在char,varchar或text类型的字段上,而且,现在只有MyISAM存储引擎支持全文索引
create table index3(
id int,
info varchar(20),
Fulltext index index3_info(info)
)engine=myisam;
使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用
在已经存在的表上,可以通过Alter table 语句直接为表上的一个或者几个字段创建索引。
alter table 表名 add 
[unique | fulltext|spatial]index
索引名(属性名[(长度)asc|desc]);
删除索引
drop index 索引名 on 表名;

你可能感兴趣的:(数据库大佬讲课7)