Day16

数据库约束

约束的作用: 保证数据的完整性. 单表约束: 主键约束: 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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

SQL Server 执行计划缓存

概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之前先要了解一些基础知识,所以文章前面会讲一些...

3919
来自专栏CaiRui

Mysql-4-数据库的基本操作

1.创建数据库 create database database_name; 例:create database aa; show create databas...

1977
来自专栏Java架构沉思录

MySQL存储引擎知多少

MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的“存储引擎”(storage_engine)呢?有时候面试题中也会问道MyS...

922
来自专栏维C果糖

史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」

字段别名,即当数据进行查询的时候,有时候字段的名字并不一定满足需求(特别地,在多表查询的时候,很可能会有同名字段),这时就需要对字段进行重命名、取别名。

3606
来自专栏JavaWeb

MySQL-大批量数据如何快速的数据迁移

2362
来自专栏农夫安全

注入学习之sqli-labs-3(第二关)

前言 本来是想一个个关卡讲下去,后来自己测试了一下,发现第二、三、四这三关跟第一关,起始原理是一样的,只不过是单引号,双引号,带不带括号的区别,只要我们带入的语...

3386
来自专栏Java面试通关手册

MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇

Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_G...

2307
来自专栏我和PYTHON有个约会

数据库连接引擎那点事儿

天长,地久。天地之所以能长且久者,以其不自生也,故能长生。是以圣人后其身而身先,外其身而身存,非以其无私邪?故能成其私。——老子

882
来自专栏Java技术交流群809340374

MySQL有哪些存储引擎,各自的优缺点,应用场景

经常面试都会问到MYSQL有哪些存储引擎,以及各自的优缺点。今天主要分享常见的存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB...

1993
来自专栏james大数据架构

SQL之收集SQL Server线程等待信息

要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信息是进行数据库优化...

1977

扫码关注云+社区

领取腾讯云代金券