MySQL入门(3)增删改&事务一些基本概念

插入

insert into 表名(字段,字段,字段...)  values(对应的值,值,值...);
insert into 表名 values(完整字段值),(完整字段值)......;

修改

update 表名  set  字段名=......   where ......

删除

delet  from  表名  where......

MySQL事务

事务是一个完整的业务逻辑单元,不可再分
保证几个DML语句要么同时成功要么同时失败
原子性(Atomicity):整个事务的全部操作,必须作为一个单元全部完成(或全部取消)事务是最小的工作单元,不可再分
一致性(Consistency):在事务开始之前与结束之后,数据库都保持一致状态
隔离性(Isolation):一个事务不会影响其他事务的运行
持久性(Durability):事务必须持久到硬盘上,才算一个事务成功的结束

隔离性

四大隔离级别:

  1. 读未提交(read uncommited)
    对方事务还没有提交,我们当前事务可以读取到对方未提交的数据。
    读未提交存在脏读(Dirty Read)现象:表示读到了脏的数据
    根本没有在硬盘文件,在缓存,是不稳定的

  2. 2档:读已提交(read commited)
    对方事务提交之后的数据我方可以读取到。
    读已提交存在的问题是:不可重复读 (解决了脏读现象)

  3. 可重复读(repeatable read)
    这种隔离级别解决了:不可重复读问题
    对方提交了,我也读不到
    读到的数据是幻象

  4. 序列化读 / 串行化读(serializabel)
    解决了所有问题,效率低,需要排队

    数据库一般都是都是3档或2档起步
    MySQL是**可重复读(3档)起步,Oracle读已提交(2档)**起步

MySQL默认自动提交,怎么关闭?

start transaction;
drop table if exists t_user
create table t_user(
	id  int  primary  key  auto  increment,
	username  varchar(255)
)	;
	start tansaction;(开启事务)
	insert into t_user(username) values('lisi');
	
	rollback;(commit;)
	设置隔离级别:
	set  global  transaction  isolation level  read  uncommited;(设置完退一下)
	如何查看隔离级别:
	select  @@global.tx_isolation;
	
	比如同时开启两个mysql:一个开启了事务但是还没提交
	另一边mysql 用select 语句能查到改的数据(脏读)

	set global transaction isolation level read commited;
	则必须事务结束才能读到数据

	set  global transaction  isolation level  repeatable read
	则其中一个mysql开启了事务,另外一个mysql结束了事务
	但是因为第一个mysql事务没有结束,所以select 的表
	和之前的一样。
	
	set  global  transaction  isolation  level  serializable;
 	则必须一边事务结束,另一个事务才可以进行,否则就卡住 

每次设置完事务隔离级别exit再重新连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值