MySQL学习之事务和数据库设计的三范式

第八章


		*事务的四个特性(ACID)
				*原子性(A)
						--事务是最小的工作单元,不可再分
				*一致性(C)
						--事务要求所有的DML语句操作的时候,必须保证同时成功或同时失败
				*隔离性(I)
						--事务A和事务B之间具有隔离性
				*持久性(D)
						--是事务的保证,事务终结的标志
		*事务的一些术语
				*开启事务 Start Transaction
				*事务结束 End Transaction
				*提交事务 Commit Transaction
				*回滚事务 Rollback Transaction
				*SQL语句:
						*commit
							--提交,成功的结束,事务的结束
						*rollback
							--回滚,失败的结束,事务的结束
		*事务的开启标志和结束标志
				*开启标志:
						--任何一条DML语句执行,标志着事务的开启
		*在MYSQL数据库管理系统中,事务的提交和回滚的演示
				--在MYSQL数据管理系统中,默认情况下,事务时自动提交的,关闭自动提交方式如下:
						--start transaction
						--set autocommit=off
						--set session autocommit = off
						以上关闭机制只对当前对话有效
				--打开自动提交
						--set autocommit=off
						--set session autocommit = off
		*事务的隔离性
				*事务A和事务B之间有一定的隔离性
				*隔离性有四个级别:
						--read uncommitted	读未提交(最低级别)
								--事务A和事务B,事务B可以读到事务A未提交的数据
								--这种读到的数据可以叫"脏数据",或者"Dirty read"
						--read committed	读已提交
								--事务A提交的数据,事务B才可以读到
								--这种隔离级别可以避免脏数据
								--这种隔离级别会导致不可重复读取
								--Oracle数据库默认的隔离机制
						--repeatable read	可重复读
								--事务A提交之后的数据,事务B读取不到
								--事务B可以重复读取数据
								--这种隔离级别可以不可重复读取,达到可重复读取
								--这个隔离级别高于读已提交
								--MySQL数据库系统默认的隔离机制
								--这种隔离级别会导致"幻象读"
						--serializable		串行化
								--事务A和事务B,事务A在操作数据库表中数据的时候,事务B只能排队
								--事务A和事务B是串行执行,不在并发
								--一般很少使用,吞吐量太低,用户体验不好
								--这种隔离级别可以避免"幻象读",每一次读取都是数据库真实的数据
		*设置事务的隔离级别
				--修改配置文件设置,修改my.ini
					[mysqld]
					transaction-isolation=...
						--READ-UNCOMMITTED
						--READ-COMMITTED
						--REPEATABLE-READ-COMMITTED
						--SERIALIZABLE
				--使用命令行设置
					set [无/session/global] transaction isolation level <isolation-level>...;
						--READ-UNCOMMITTED
						--READ-COMMITTED
						--REPEATABLE-READ-COMMITTED
						--SERIALIZABLE
					*设置事务的隔离级别作用于全局
						set global transaction isolation level <isolation-level>...;
					*设置事务的隔离级别作用于当前会话
						set [无/session] transaction isolation level <isolation-level>...;
		*查看隔离级别
				--查看当前会话的隔离级别
					select @@tx_isolation;
					select @@session.tx_isolation;
				--查看全局的隔离级别
					select @@global.tx_isolation;

 数据库设计的三范式


	--数据库设计第一范式
			*要求有主键,并且每一个字段原子性不可再分
	--数据库设计第二范式
			*要求所有非主键字段完全依赖主键,不能产生部分依赖
			*尽量不使用联合主键
	--数据库设计第三范式
			*要求非主键字段和主键字段不能产生传递依赖
			
	--比较经典的设计
			*一对一
					--两张表存储,外键唯一(fk-unique)
					--两张表存储,共享主键
			*一对多
					--分两张表存储,在多方的一方添加外键引用一方的主键字段
			*多对多
					--三张表,两张表分别存储两方的相关信息,第三张表存储两方的关系
	--数据库开发实际设计
			*数据库设计尽量遵循三范式
			*有时也根据实际情况进行取舍

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值