数据库相关(必背版)
三大范式
第一范式
(数据表的列不可再分)
原子性:强调的是列的原子性,即数据库中每一列的字段都是单一属性,不可再分。而且这个单一属性必须由基本数据类型所构成
第二范式
(满足第一范式,并且表中非主键列不存在对主键的部分依赖)
依赖性:满足第一范式的基础上再以来两个约束:一张表必须有一个主键;非主键类必须完全依赖于主键,而不能只依赖主键的一部分
第三范式
(满足第二范式,表中的列不存在对非主键列的依赖传递)
在满足第二范式的基础上再满足一个条件:非主键列必须直接依赖于主键,不能存在传递依赖
五大约束
- PRIMARY KEY(primary key):设置主键约束;
- UNIQUE(unique):设置唯一性约束,不能有重复值;
- DEFAULT(default):默认值约束,height DOUBLE(3,2) height不输入是默认为(1,2)。
- NOT NULL(not null):设置非空约束,该字段不能为空;
- FOREIGN KEY (foreign key):设置外键约束。
什么是MySQL
关系型数据库管理系统
因为对个人使用时开源的,所以广泛使用
MySQL有哪些数据类型
整数类型(int)
小数类型(float,double)
日期类型(time,date,datetime)
文本/二进制类型(char,varchar,text
char和varchar的区别
char是定长的,根据定义的字符串长度分配足够的空间。
varchar是可变长字符串,比char更节省空间
对于经常变更的数据来说,CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
对于非常短的列,CHAR比VARCHAR在存储空间上更有效率。
使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。
引擎
- Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。
- MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。
- MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。
myisan与innodb区别
储存结构 myisan分三个文件,innodb同一个数据文件
空间大小 MyISAM可被压缩,存储空间较小 InnoDB的表需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引
文件格式 m数据索引分开索引,i是集中储存
外键,事务 innodb
锁 m是表锁,i是行锁,表锁,力度小适合并发
查 myisan
增删改 innodb
哈希索引 myisan
全文索引 innodb
MyISAM索引与InnoDB索引的区别?
InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
MySQL默认Innodb
索引
什么是索引
索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,更通俗的说,索引就相当于目录
索引优缺点
索引的优点
- 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
索引的缺点 - 时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率;
- 空间方面:索引需要占物理空间。
索引设计原则
- 适合索引的列是出现在where子句中的列,或者连接子句中指定的列
- 基数较小的类,索引效果较差,没有必要在此列建立索引
- 使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间
- 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。
索引
主键索引
唯一索引
联合索引(最左匹配原则)
事务
事务是逻辑上的一组操作,要么都执行,要么都不执行。
事物的四大特性(ACID)
- 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
- 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
- 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
- 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
什么是脏读?幻读?不可重复读?
隔离级别
读未提交
读已提交
可重复读
可串行化(所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰)
锁
视图
为什么要使用视图?什么是视图?
为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。
所谓视图,本质上是一种虚拟表,在物理上是不存在的,其内容与真实的表相似,包含一系列带有名称的列和行数据。
视图根本用途:简化sql查询,提高开发效率。如果说还有另外一个用途那就是兼容老的表结构。
触发器
什么是触发器?触发器的使用场景有哪些?
触发器是用户定义在关系表上的一类由事件驱动的特殊的存储过程。触发器是指一段代码,当触发某个事件时,自动执行这些代码。
sql优化
未完
待续

浙公网安备 33010602011771号