mysql

MySQL三范式

第一范式(1NF):数据库中每一列都是不可再分的。 【 比如说文章表的tagid,以 ”逗号“ 隔开,商品表的轮播图以 “竖线” 隔开,这种设计方式是不满足第一范式的 】 要求数据达到原子性,使数据不可再分;
第二范式(2NF): 使每一行数据具有唯一性,并消除数据之间的“部分依赖”,使一个表中的非主键字段,完全依赖于主键字段;

经验上:常常是每个表都要设计主键,并通常多数情况下,使用一个自增长的int类型的字段当做主键

有2个方面的要求: 
1、每一行数据具有唯一性:只要给表设计主键,就可以保证唯一性。 
2、消除数据之间的“部分依赖”(不允许有多个候选键);
第三范式(3NF):使每个字段都独立地依赖于主键字段(独立性),而要消除其中部分非主键字段的内部依赖——这种内部依赖会构成“传递依赖”
【非主键字段不能相互依赖。】

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

经验总结:通常,在设计表的时候,基本只要遵循这样一个原则,就可以满足前述3范式要求:每一种数据,使用一个表来存储。

MYSQL 四种隔离级别

1.读未提交(Read uncommitted);
假如A事务和B事务对同一张表进行操作,B事务进行了DML(INSERT、UPDATE、DELETE)语句,但没有提交(commit)或者回滚(rollback),此时A事务便可以查看到B事务还没有提交的数据,就是保存在事务性活动的日志文件中的数据。这样可能会造成脏读。何为脏读:脏读就是B事务还没有提交的数据,A事务便可以查看到,在用户的眼里,A用户就会以为这条数据已经存在了,其实还没有提交,如果提交失败,便会回滚,这条数据并没有添加成功,而A用户却以为成功了。
这里你需要自己改以下隔离级别 set global transaction isolation level 隔离级别; 最后再退出数据库,再重新进入。

2.读已提交(Read committed);
假如A事务和B事务对同一张表进行操作,B事务进行了DML语句,但没有进行提交,那么A事务是读取不到的,它解决了脏读,但是出现了不可重复读

3.可重复读(Repeatable read),数据库默认开启;
A事务读取不到B事务还没有提交的数据;解决了不可重复读,但会造成幻影读(幻读),数据不够真实。mysql中默认的事务隔离级别就是这个。

4.序列化\串行化(Serializable )
这个隔离级别是最高级别,效率最低,但是非常安全,不能并发,俩个事务不能对同一张表进行操作,需要等待A事务操作完之后,B事务才能进行操作。每次读取的数据都是最真实的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值