数据库16

时间:2022-06-05
本文章向大家介绍数据库16,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

数据库约束

约束的作用: 保证数据的完整性. 单表约束: 主键约束: primary key //一般后边还会写上auto_increment 唯一约束: unique 非空约束: not null* 多表约束: * 外键约束: foreign key多表的分析和设计

    关系分类:
		一对多的关系:
			一个部门可以有多个员工, 一个员工只能属于某一个部门. 
			一个分类下有多个商品, 一个商品只能属于某一个分类.
			一个用户产生多个订单, 一个订单只能属于某一个用户.
		
		多对多的关系:
			一个学生可以选择多门课程, 一个课程也可以被多个学生选择.
			一个订单包含多个商品, 一个商品也可以在多个订单中.
		
		一对一的关系: 
			一个公司只能对应一个注册地址, 一个注册地址只能对应一个公司.

多表建表原则

  • 一对多的建表原则: * 在"多"的一方创建一个字段, 作为外键, 指向"一"的一方的主键.
  • 多对多的建表原则: * 需要创建第三张表(中间表), 在中间表中至少需要有两个字段, 分别作为外键指向多对多双方的主键.
  • 一对一的建表原则: * 唯一外键对应.

多表查询连接查询 交叉连接: //了解 select * from A,B; //最终结果获取到的是两个表的笛卡尔积, 一般不用这种做法. 内连接:(inner join) 显示内连接: select * from A inner join B on 条件; 隐式内连接: select * from A,B where 条件; 外连接:(outer join) 左外连接: select * from A left outer join B on 条件; 右外连接: select * from A right outer join B on 条件; 内连接和外连接的区别: 内连接: 查到的是 两个表的交集. 左外连接: 左边表的全部 和 两个表的交集. 右外连接: 右边表的全部 和 两个表的交集.子查询 概述: 指的是一条语句的查询条件需要依赖另一条语句的查询结果. in: 只要满足其中一个就行. any: 只要比给定的所有值中的任意一个大(小)就行. all: 必须比给定的所有值都要大(小).

事务

    概述: 
		事务指的是逻辑上的一组操作, 组成这组操作的各个逻辑单元要么全部都成功, 要么全失败.
		
		//MySQL中默认情况下,一条语句是一个事务, 事务会自动提交.  
		//Oracle中默认事务是不提交的, 需要手动提交事务.
	
	MySQL事务管理的命令:
		start transaction;		//开启事务
		SQL语句1;				//要执行的SQL语句
		SQL语句2;			
		commit					//提交事务
		rollback;				//回滚事务
		
		show variables like '%commit%';
		
		
	事务的特性:
		1. 原子性.
			强调事务的多个操作不可分割.	
		2. 一致性.
			强调事务执行的前后, 数据完整性保持一致.
		3. 隔离性
			强调事务执行过程中, 不应该受到其他事务的干扰.
		4. 持久性
			强调事务一旦结束, 数据就持久到数据库中.
			
	如果不考虑事务的隔离性, 有可能会引发一些安全性的问题.
		读的方面:
			脏读:		指的是一个事务读到另一个事务未提交的数据.
			不可重复读: 指的是一个事务读到了另一个事务已经提交的 update的数据, 
						导致多次查询结果不一致.
			虚读/幻读:	指的是一个事务读到了另一个事务已经提交的 insert的数据,
						导致多次查询结果不一致.
		写的方面: (了解就行, 不用重点掌握)
			丢失更新.
		
		
		解决事务的读问题:
			设置事务的隔离级别:
				read uncommitted:	//未提交读
					脏读, 不可重复读, 虚读都有可能发生.
				read committed:		//已提交数据库
					避免脏读, 但是不可重复读和虚读是有可能发生的.
				repeatable read: 	//可重复读
					避免脏读, 不可重复读. 但是虚读是有可能发生的.
				serializable: 串行化的
					避免脏读, 不可重复读, 虚读
					
			安全性:
				read uncommitted < read committed < repeatable read< Serializable
			效率:
				read uncommitted > read committed > repeatable read  > Serializable
				
		一般数据库设置: read committed 和 repeatable read
			MySQL默认:	repeatable read
			Oracle默认: read committed