数据库:事务

目录

一、存储引擎

1.什么是存储引擎?

2.常见的存储引擎有哪些?

3.如何查看和设置存储引擎?

二、mysql字符集编码

1.查看字符集编码

2.修改字符集编码

三、事务

1.什么是事务?

2.开启和提交事务?

3.事务的ACID特性(面试经常问)

4.并发事务产生的问题

5.设置事务隔离级别

6.查看和修改事务隔离级别


一、存储引擎

1.什么是存储引擎?

数据库存储引擎是数据底层软件组织,规范了数据底层的组织方式、锁水平、索引策略等。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。

数据库管理系统(DBMS)使用数据存储引擎进行创建、查询、更新和删除数据。

mysql的核心就是存储引擎。mysql是插件式数据库,支持插件式存储引擎,mysql5.5之后默认使用InnoDB存储引擎。什么是插件式?可以切换功能组件,比如mysql可以切换存储引擎。

2.常见的存储引擎有哪些?

InnoDB:事务型数据库首选的存储引擎,安全性能高,支持行锁定,支持外键。

myisam:插入速度和查询效率较高,但不支持事务。

memory:数据存储于内存,查询效率高。

功能myisammemoryInnoDBArchive
存储限制256TBRAM64TBNone
支持事务NoNoYesNo
支持全文索引YesNoNoNo
支持数索引YesYesYesNo
支持哈希索引NoYesNoNo
支持数据缓存NoN/AYesNo
支持外键NoNoYesNo

3.如何查看和设置存储引擎?

#查看索引

show engines;

#在mysql配置文件my.ini中修改,如下,然后重启mysql服务即可生效

default-storage-engine=INNODB

二、mysql字符集编码

1.查看字符集编码

#character_set_client

#character_set_connection

#character_set_database

#character_set_filesystem

#character_set_results

#character_set_server

#character_set_system

show variables like '%char%';

2.修改字符集编码

步骤:

  • 关闭mysql服务:net stop mysql(windows命令)
  • 修改my.ini配置文件:
    • [client]    default-character-set=utf8
    • [mysql]    default-character-set=utf8
    • [mysqld]    character-set-server=utf8 和 collation-server=utf8_general_ci
  • 启动mysql服务:net start mysql

三、事务

1.什么是事务?

一组DML操作要么同时成功,要么同时失败。

2.开启和提交事务?

语法格式:

#关闭mysql自动提交事务
set autocommit = 0;
#开启事务
start transaction;
#业务
……
commit;#提交:将事务持久化到数据库
rollback;#回滚:恢复到开始事务之前的状态

注意事项:

  • dml操作必须在事务环境执行。
  • mysql默认自动提交事务,比如单句DML操作就是这样。
  • set autocommit=0; #关闭mysql自动提交事务。

3.事务的ACID特性(面试经常问)

原子性:事务内的DML操作必须整体成功或整体失败。

一致性:事务执行前后整体状态变,比如表结构,字段约束等。

隔离性:并发事务之间不能产生干扰。

持久性:事务提交后将持久化到数据库。

4.并发事务产生的问题

多个线程开启各自的事务操作数据库中的数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。如果不考虑隔离性,可能会引发如下问题:

脏读:一个事务读(t1)到另一个事务(t2)提交的数据,则t1脏读了数据。针对同一条记录。

不可重复读:一个事务(t1)在可读范围内,多次读取发现数据不一致,原因是另一个事务(t2)在此过程中修改了该数据并提交了事务,则t1重复读了数据。针对同一条记录。重点在于修改。

幻读:一个事务(t1)可读范围内,多次读取发现数据新增或减少,原因是另一个事务(t2)在此过程中添加或删除记录并提交事务,则t1出现幻读。针对多条记录。重点在于插入或删除。

5.设置事务隔离级别

数据库定义了4中隔离级别:

Read uncommitted(读未提交):最低级别,以上情况均无法保证,不能解决任何问题。

Read committed(读已提交):可避免脏读情况发生。

Repeatable read(可重复读):可避免脏读、不可重复读情况的发生。

Serializable(串行化):可避免脏读、不可重复读、幻读情况的发生。

Oracle支持2种事务隔离级别:Read committed 和 Serializable,默认是Read committed。

mysql支持4种事务隔离级别,默认是Repeatable read。

 

6.查看和修改事务隔离级别

#查看

select @@tx_isoation;

#修改

set session transaction isoaiton level 值;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值