数据库理论

Posted on By xqw

数据库范式:

1NF:每一列元素不能再分割 (一个字段里同时包含部门名 部门id)
2NF:每行都有唯一标识,列之间有重复数据需要拆分表,依赖主键(人员部门表合一则违法,部门是会独立存在且可能一个人都没有)
3NF:不能传递依赖主键,即不能存在:员工表同时出现两列: 部门名 部门id

https://www.cnblogs.com/lca1826/p/6601395.html

sql分类

DDL(Data Definition Language):

DDL或数据定义语言实际上由可用于定义数据库模式的SQL命令组成。它仅处理数据库模式的描述,并用于创建和修改数据库中数据库对象的结构。

CREATE –用于创建数据库或其对象(如表,索引,函数,视图,存储过程和触发器)。 DROP –用于从数据库中删除对象。 ALTER -is用于改变数据库的结构。 TRUNCATE –用于从表中删除所有记录,包括为记录分配的所有空间都将被删除。 COMMENT –用于将注释添加到数据字典。 RENAME -is用于重命名存在于数据库中的对象。

DQL (Data Query Language)

语句用于对模式对象内的数据执行查询。DQL命令的目的是基于传递给它的查询来获取某种模式关系。

SELECT –用于从数据库检索数据。

DML(Data Manipulation Language)

处理数据库中存在的数据的SQL命令属于DML或数据操作语言,并且包括大多数SQL语句。

INSERT –用于将数据插入表中。 UPDATE –用于更新表中的现有数据。 DELETE –用于从数据库表中删除记录。

DCL(Data Control Language)

DCL包含诸如GRANT和REVOKE之类的命令,这些命令主要处理数据库系统的权限,权限和其他控制。

GRANT -gives用户的访问权限的数据库。 REVOKE- 撤消使用GRANT命令给定的用户访问权限。

TCL(transaction Control Language):

TCL命令处理数据库内的事务。

COMMIT –提交事务。 ROLLBACK –发生任何错误时回滚事务。 SAVEPOINT –在事务中设置保存点。 SET TRANSACTION –指定交易的特征。

mysql 存储引擎

Innodb引擎概述
Innodb引擎是MySQL(5.6后)默认的引擎,提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。

MyISAM引擎概述
没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。不过和Innodb不同,MyISAM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyISAM也是很好的选择。
简单介绍区别:
1、MyISAM是非事务安全的,而InnoDB是事务安全的 ×

2、MyISAM锁的粒度是表级的,而InnoDB支持行级锁

3、MyISAM支持全文类型索引,而InnoDB不支持全文索引 ×

4、MyISAM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyISAM

5、MyISAM表保存成文件形式,跨平台使用更加方便

应用场景:

1、MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyISAM
2、InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB

索引区别

Innodb的B+树的叶子节点key存放的是主键,value存放完整data,索引和数据文件不分离,因此Innodb必须有主键,
没有也会自动创建长度为6个字节,类型为长整形的主键,而MyISAM的叶子节点存放指向data的地址,索引和数据文件分离
辅助索引
辅助索引data域存储相应记录主键的值而不是地址,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。 ,
了 解不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,
例如知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为 主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。
再例如,用非单调的字段作为主键在InnoDB中不是个好主意,因为 InnoDB数据文件本身是一颗B+Tree,
非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用 自增字段作为主键则是一个很好的选择。

Mysql 存储引擎的区别和比较

mysql vs oracle

oracle:
  1、物化视图
  2、同义词
  3、dblink

事务隔离级别

理解MySql事务隔离机制、锁以及各种锁协议

乐观锁 悲观锁

数据库悲观锁与乐观锁

mysql的锁–行锁,表锁,乐观锁,悲观锁