事务
============================================
*) 事务是数据操作的最小单元
*) 多个数据增删改操作,完成的一项业务处理
*) 如果事务事务成功,其中每一项操作都生效
如果事务事务失败,其中每一项操作都失败
*) 数据库数据操作,以事务为一个最小操作单元,
不应该以一个sql语句为一个操作单元;
要么整个事务成功,要么整个事务失败
*) 事务的原子性
*) 在当前事务中对数据的修改,只对当前连接可见
*) ACID
------------
A - 原子性 Atomic
C - 一致性 Consistency
转账前 a+b = 100
转帐后 a+b = 100
I - 隔离性 Isolation
一个事物进行中时,
另一事物不能操作数据
D - 持久性 Durancy
提交事务之后,
数据持久生效
*)事务操作
*)开始事务
start transaction;
set autocommit=0;
*)提交事务,事务结束
commit;
*)回滚事务,事务结束
rollback;
*) mysql 默认不开始事务,需要手动启动事务
*)每一步数据修改都直接生效
*)查看事务是否开启
show variables like 'autocommit';
自动提交开启,没有事务
自动提交关闭,开始事务
*)innodb 提供行级锁
一个事务修改一行数据未提交时,
该行数据会被锁定,
不允许其他事务修改
*)事务隔离级别(针对的是事务之间的)
set tx_isolation='READ-UNCOMMITTED';
set tx_isolation='read-committed';
set tx_isolation='repeatable-read';
set tx_isolation='serializable';
1) 脏读 READ-UNCOMMITTED 读未提交数据
一个事务修改一半的数据
被其他事务读取
2) 不允许脏读 read-committed 读提交数据
只能读取其他事务已提交的数据
虚读 update
幻读 insert,delete
3) 可重复读 (mysql 默认) repeatable-read
事务过程中,
前后读取的数据一致,
即使过程中数据已被其他事务修改,
也读取旧的数据
4) 串行化 serializable
所有事务排队依次执行,
不能同时执行
*) 查看隔离级别
show variables like 'tx%';
视图 view
============================================
* 将一个查询的查询结果当做表
* 可以从这个虚拟的表查询
drop view if exists v1;
create [or replace] view v1
as
selet ...;
* 视图不是表,不保存数据,
从视图查询时,
本质是从查询结果再查询(两层查询)
* 查看视图
show tables;
desc v1;
show create view v1;
* 为什么使用视图
*)视图在大的项目中非常常用
*)简化查询
select
from
a join b .. join c...join d...join e...
select .. from v1;
*)安全
创建视图给用户访问,
隐藏真实数据表
*)一般只从视图查询,不对视图做增删改操作
索引
==============================================
* 数据存储位置目录
*)哈希索引
*)红黑树索引
* 提高查询效率,首先考虑创建索引
* where name='abc'
name数据创建索引
* where name='abc' and birth='1993-5-3'
name和birth两个字段创建索引
对 where name='abc' 单字段过滤也有效
但对 where birth='1993-5-3' 单字段过滤无效
* 创建索引
create index index_name on tb1(name);
create index first_name_index
on employees(first_name);
create index job_dept_index
on employees(job_id, department_id);
数据备份和恢复
================================================
* 导出库表及数据
mysqldump -uroot -p
--default-character-set=utf8
库名>/home/soft01/hr.sql
mysqldump -uroot -p --default-character-set=utf8 stu>/home/soft01/stu.sql
cat ~/stu.sql |more
* 将备份数据重新导入数据库
mysql -uroot -p --default-character-set=utf8
库名<文件路径
mysql -uroot -p --default-character-set=utf8
stu2</home/soft01/stu.sql
drop database if exists jtds;
create database jtds charset=utf8;
将 jtds.sql 导入 jtds 库
limit
=================================================
* limit 5
前5条
* limit 0,10
从第一条开始的10条
* limit 10,10
从第十一条开始的10条
* limit 20,10
从第二十一条开始的10条
* 查询第 page 页,每页10条
第一个参数: (page-1)*10
第二个参数: 10