关系型数据库
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