数据库小结

发布时间:2019年09月13日 阅读:234 次

【分类】

关系型数据库

Nosql 非关系型数据库

基本命令

登入

退出 exit;

show tables;

create database test2;

describe  pet; //查看数据表结构

基本语法


数据库事务

【回滚】

Mysql 数据库 默认开启了自动提交

可以手动将其设置为0,这样操作会被记录到一个临时表里。

也可以使用begin 自定义一个事务

然后 此时只有事务结束commit时,才会进行提交,提交前的操作可以进行回滚。

【事务有四大特性】

 原子性(事务是最小的单位,不可以在进行分割)一致性 (同一事务中的语句必须保证同时成功或者同时失败)

 隔离性(事务间是隔离的) 持久性(事务一旦提交不可返回)

【数据库的事务有四个隔离级别】

分别是 读未提交 读提交 重复读 序列化

1. Read UnCommitted(读未提交)
最低的隔离级别。一个事务可以读取另一个事务并未提交的更新结果。

2. Read Committed(读提交)
大部分数据库采用的默认隔离级别。一个事务的更新操作结果只有在该事务提交之后,另一个事务才可以的读取到同一笔数据更新后的结果。

3. Repeatable Read(重复读)
mysql的默认级别。整个事务过程中,对同一笔数据的读取结果是相同的,不管其他事务是否在对共享数据进行更新,也不管更新提交与否。

4. Serializable(序列化)
最高隔离级别。所有事务操作依次顺序执行。注意这会导致并发度下降,性能最差。通常会用其他并发级别加上相应的并发锁机制来取代它。

   大部分数据库采用读提交隔离级别 。 重复读为mysql默认级别,即整个事务过程中,对同一笔数据的读取结果是相同的,不管其他事务是否在对共享数据进行更新,也不管更新提交与否。

   其中第一种模式举例:

   小明在淘宝上买东西,进行购买操作,

此时商家进行查询发现小明已付款,小明进行回滚。

  出现问题,称之为脏读,即一个事务读取到另外一个事务未提交的数据

 第二种模式 会出现 不可重复读的情况

  举例:小明在事务1读取了自己工资

  财务人员在事务2中修改了小明的工资,并进行提交,小明再次读取

 发现同一个事务中前后两次读取结果不一致,导致了不可重复读的问题。

不可重复读的重点在于修改。

第三种模式 会出现 幻读的情况,其重点在于新增或者删除

举例:事务1读取所有工资为1000的员工

事务2向表中插入一条数据,并提交

 事务1 再次读取 出现了记录数不一致的情况。

 或者 事务1插入一条与事务2相同的数据发现插入不进去,也属于幻读。

第四种模式 将所有事务顺次执行 性能最差

 通常使用其他并发级别+并发锁来取代。

参考资料:

sql_node/MySQL学习笔记.md at master · hjzCy/sql_node

MySQL 学习笔记(一) - qq_44483394的博客 - CSDN博客

一天学会 MySQL 数据库_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili




Tag:
相关文章

发表评论: