MySQL-特性

一.事务

transaction事务

把多条sql语句视为一个整体执行,这些sql 要么都成功, 其中有一个失败了,之前的操作也需要撤销

MySQL中的事务控制

默认条件下,是一条语句一个事务,要多条语句一个事务,要通过‘begin’ ‘commit’ ‘rollback’来控制事务
格式

begin;//表示事务的起点,等价方式‘start     transaction’
sql1;
sql2;
...
commit(提交,表示结果都生效); 或者rollback(回滚,用来撤销事务,都不生效);表示事务的终点

在这里插入图片描述
在这里插入图片描述

二.锁

(1)什么是锁

一个用户在修改数据时,另一个用户修改数据会处于阻塞状态
在这里插入图片描述

(2)分类

1.InnoDB 行级锁,只要两个客户端更新的是不同的行,互不干扰
2.MyISAM 表锁,锁住整个表

(3)应用

1.增删改都会在行上默认添加排他锁(X锁),表示其他用户不能增删改,但是可以查询;
2.查询可以添加共享锁,表示可以同时查询,但是其他用户不能修改,可以添加共享锁;
select * from 表 lock in share mode
3.查询时添加排他锁,别人不能再添加排他锁和共享锁
select * from 表 for update
mysql对查询有特别的优化:不用锁也能实现并发访问: 多版本并发访问(MVCC)

三.事务隔离性

有不同的隔离级别,
隔离级别越低,并发性越好,但数据的一致性差
隔离级别越高,并发性差,但数据的一致性高
由低到高四种:
读未提交 < 读提交 < 可重复读(mysql默认) < 序列化读

错误的级别由高到低
脏读 , 不可重复读, 幻读

(1)脏读
7369的工资1000
事务1                                              事务2
begin                                              begin
修改7369的工资为8000
                                                   select * sal from emp where empno=7369;// 8000
rollback

将隔离级别提高到读提交,可以避免脏读

(2)不可重复读

一边查询,另一边做update操作
一个事务内多次查询结果不一致

7369的工资1000
事务1                                              事务2
begin                                              begin
                                                   select * sal from emp where empno=7369; // 1000
修改7369的工资为8000
commit;
                                                   select * sal from emp where empno=7369; // 8000

要避免脏读、不可重复读:将隔离级别提高到可重复读隔离级别

(3)幻读

一边查询,另一边做insert操作

事务1                                              事务2
begin                                              begin
查询到10,20,30,40条记录
                                                   insert 50号部门
                                                   commit
insert 50号部门 报错,主键冲突

要避免脏读、不可重复读、幻读:将隔离级别提高到序列化读
所谓的序列化读就是把多版本并发退化到锁的并发控制:select语句上会被偷偷加上共享锁

四.事务四特性(ACID)

原子性 A 多个sql要作为一个整体运行,不可分割
一致性 C 一个事务内结果应当一致
隔离性 I
持久性 D 事务一旦提交,事务内的修改就应当永久生效

五.其他sql总结

查看有哪些库: show databases;
查看库的创建语句: show create database 库名;
使用库: use 库名;
查看有哪些表: show tables;
查看表结构: desc 表名;
查看建表语句: show create table 表名;
\G 可以取代; 效果是把表行转列
查看系统变量的值: select @@系统变量名;

select @@transaction_isolation; // 查看事务隔离级别
select @@port; // 查看服务器端口号
select @@character_set_server; // 查看默认字符集
select @@secure_file_priv;

show variables like ‘character%’;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值