事务(Transaction):
1.是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
2.事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
事务的特征:ACID
A:事务的原子性;事务是一个不可分割的整体,事务必须具有原子特征,事务操作时,要么全部执行,要么全部不执行;
C:事务的一致性;一个事务执行之前和之后,数据库数据必须保持一致性状态;(比如银行转账时,金额总和不变);
I:事务的隔离性;当两个或者多个事务并发执行时,为保证数据的安全,将一个事务内的操作和其他事务隔离起来,不被其他正在执行的事务看到;
D:事务的持久性;事务完成之后,数据库保证数据库中的数据修改是永久性的,即使数据库出现故障,也能保证恢复数据;
事务隔离:MVCC
实现数据的隔离性:
表锁和行锁;
SQL的执行自动提交和手动提交过程,默认的是自动提交;
事务隔离性使用不当会照成脏数据问题:
脏读:一个事务读取了另一个事务未提交的数据;(当事务A和事务B并发操作时,事务A更新数据后,事务B读取到A未提交的数据,此时事务A回滚,事务B就读取到了事务A未提交的无效的脏数据);
不可重复读:一个事务操作导致另一个事务读取到前后两次不同的数据;(例如,事务A和事务B进行并发操作,事务B查询读取数据后,事务A更新操作事务B读取的数据,此时事务B继续查询数据,会发现自己前后两次读取的数据结果不一致);
幻读:一个事务的操作导致另一个事务前后两次查询的结果的数量不同;(例如,事务A和事务B进行并发操作,当事务B查询读取数据后,事务A操作新增或删除了一条满足事务B的条件的数据,此时事务B再次进行查询到前一次不存在的数据或者前一次没有的数据),(事务B读取了事务A新增的内容或者读不到事务A删除的数据);
由于多个线程会请求相同的数据,事务之间通常都会用锁互相隔离,由于数据库支持不同类型的锁,因此Java JDBC支持不同级别的事务处理,它们由Connection对象指定。
在JDBC中,定义了以下5种事务隔离级别:
TRANSACTION_NONE。 表示不支持事务
TRANSACTION_READ_UNCOMMITTED。未提交读。说明在提交前一个事务可以看到另一个事务的变化。这样读”脏”数据,不可重复读和虚读都是被允许的。
TRANSACTION_READ_COMMITTED。已提交读。说明读取未提交的数据是不允许的。这个级别仍然允许不可重复读和虚读产生。
TRANSACTION_REPEATABLE_READ。可重复读。说明事务保证能够再次读取相同的数据而不会失败,但虚读仍然会出现。
TRANSACTION_SERIALIZABLE。可序列化/串行化。是最高的事务级别,它防止读脏数据,不可重复读和虚读。
MySQL的事务处理:
查看MySQL事务自动提交事务:
select @@autocommit;
//0 :手动提交 1:自动提交 默认1
设置手动提交:
set autocommit = 0;
开启一个事务:begin;
提交一个事务:commit;
回滚事务:rollback;
设置一个名称为tg的保存点:savepoint tg;
回滚到tg位置保存点:rollback to tg;
查询数据库的隔离级别:
select @@TX_ISOLATION
show variables like ‘%isolation%’;
存储引擎
MySQL最大的特点时支持插件式的存储引擎;
MyISAM引擎:
特点:不支持事务,也不支持外键,索引采用非聚集索引(数据和索引分开存储),访问快;
Myisam的三个表,文件名和表名相同,后缀不同:
.frm:存储表定义
.MYD:存储数据
.MYI:存储索引
InNoDB引擎:
支持事务、支持自动增长列、外键功能,索引采用聚集索引;
InNoDB:
.frm:存储表定义
.idb:存储数据和索引
memory引擎:
memory是使用内存来存储数据,每一个memory在磁盘上就存在一个.frm;
memory访问特别快,因为数据和索引都存储在内存中;
采用哈希结构(不能进行范围);
但是服务一旦关闭,数据就会丢失;
MYSQL不同的存储引擎有哪些区别时?以下几点回答
种类 锁机制 B-树索引 哈希索引 外键 事务 索引缓存 数据缓存
MYISAM 表锁 支持 不支持 不支持 不支持 支持 不支持
INNODB 行锁 支持 不支持 支持 支持 支持 支持
memory 表锁 支持 支持 不支持 不支持 支持 支持
锁机制:表示数据库在并发请求访问的时候,多个事务在操作时,并发操作的粒度 ;
B-树索引和哈希索引:主要是加速SQL的查询速度;
外键:子表的字段依赖父表的主键,设置两张表的依赖关系;
MySQL设置存储引擎:
查看数据库存储引擎:
show englines;
成绩表的时候设定存储引擎:
create table xx() engine=innodb;
修改已经存在的表的存储引擎:
alter table table_name engine = innodb;
需要修改配置文件
Windows-》my.ini
Unix -》my.cof
default-storage-engine = INNODB;
修改完配置修改保存重启就可以生效