目录
一、存储引擎
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 值;