数据库:事务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_1018944104/article/details/83003488

目录

一、存储引擎

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:数据存储于内存,查询效率高。

功能 myisam memory InnoDB Archive
存储限制 256TB RAM 64TB None
支持事务 No No Yes No
支持全文索引 Yes No No No
支持数索引 Yes Yes Yes No
支持哈希索引 No Yes No No
支持数据缓存 No N/A Yes No
支持外键 No No Yes No

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 值;

猜你喜欢

转载自blog.csdn.net/qq_1018944104/article/details/83003488
今日推荐