数据库相关(必背版)

三大范式

第一范式
(数据表的列不可再分)
原子性:强调的是列的原子性,即数据库中每一列的字段都是单一属性,不可再分。而且这个单一属性必须由基本数据类型所构成
第二范式
(满足第一范式,并且表中非主键列不存在对主键的部分依赖)
依赖性:满足第一范式的基础上再以来两个约束:一张表必须有一个主键非主键类必须完全依赖于主键,而不能只依赖主键的一部分
第三范式
(满足第二范式,表中的列不存在对非主键列的依赖传递)
在满足第二范式的基础上再满足一个条件:非主键列必须直接依赖于主键,不能存在传递依赖

五大约束

  1. PRIMARY KEY(primary key):设置主键约束;
  2. UNIQUE(unique):设置唯一性约束,不能有重复值;
  3. DEFAULT(default):默认值约束,height DOUBLE(3,2) height不输入是默认为(1,2)。
  4. NOT NULL(not null):设置非空约束,该字段不能为空;
  5. 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优化

未完
待续

posted @ 2022-03-09 22:58  扬长避短  阅读(242)  评论(0)    收藏  举报