首页 > 数据库 >数据库三大范式,mysql索引,事务的特性和隔离级别

数据库三大范式,mysql索引,事务的特性和隔离级别

时间:2023-07-31 17:47:28浏览次数:70  
标签:事务 范式 数据库 全文索引 索引 mysql 主键 三大

1 数据库三大范式是什么

数据库设计理论中的三大范式是指关系数据库中的规范化原则,目的是减少数据冗余和数据更新异常。

第一范式(1NF):
第一范式要求关系数据库表的每个属性都是原子性的,即每个属性不能再细分为更小的数据项。它要求将数据划分为最小的单元,避免重复或多值属性。这样可以确保数据的一致性,减少冗余。

第二范式(2NF):
第二范式要求数据库表中的非主键属性完全依赖于主键。换句话说,表中的每个非主键属性要么完全依赖于所有主键,要么完全依赖于某个候选键。通过分离不同的关系,可以避免冗余数据,并提高数据的一致性和可维护性。

第三范式(3NF):
第三范式要求数据库表中的非主键属性之间不存在传递依赖。换句话说,非主键属性之间不能相互依赖,而是通过直接依赖于主键或候选键来描述。这样可以消除数据冗余和更新异常,提高数据存储的灵活性和性能。

'''
数据库的三大范式是指关系数据库设计中的三个规范化级别,目的是为了减少数据冗余、提高数据的一致性和完整性。

第一范式(1NF):确保每个数据列都是原子的,不可再分。即每个数据列都只包含一个值,不包含多个值或重复的值。

第二范式(2NF):在满足1NF的基础上,确保非主键列完全依赖于主键。即非主键列不能依赖于主键的一部分,而是必须依赖于整个主键。

第三范式(3NF):在满足2NF的基础上,确保非主键列之间没有传递依赖关系。即非主键列不能依赖于其他非主键列。		===》作者和图书
'''

第一范式:1NF 是指数据库表的每一项都是不可分割
	-每列的值具有原子性,不可分割
    -每一个字段的值都只能是单一值
第二范式(2Nf):在满足第一范式的基础之上,
	-如果表是单个主键,那么主键以外的列完全依赖于主键,其他列需要与主键有关
    -如果是复合主键,那么主键以外爱的列必须完全依赖与主键
第三范式(3NF):在满足第二范式的基础只之上
	-表中的 非主键列必须和主键直接相关而不是间接相关,非主键列之间不能相关依赖不存在传递依赖

2 mysq有哪些索引类型,分别有什么作用

B树索引:B树索引是MySQL中最常用的索引类型,适用于全值匹配、前缀匹配和范围查询。B树索引适用于存储数据量较大的表。
'''
in not in
between … and …表示连续的范围内
'''

哈希索引:哈希索-0引适用于等值查询,通过将索引列的值计算哈希值,然后根据哈希值进行快速查找。哈希索引适用于存储数据量较小的表。

全文索引:全文索引适用于对文本进行全文搜索的场景。它可以对文本进行分词,然后根据分词结果建立索引,支持模糊查询和关键词搜索。

空间索引:空间索引适用于存储空间数据类型的列,如地理位置坐标。它可以对空间数据进行快速的范围查询和最近邻查询。

前缀索引:前缀索引是指只使用索引列的前缀作为索引,而不是使用完整的值。它可以节省索引的存储空间,但可能会增加查询的范围。

联合索引:组合索引是指在多个列上建立的索引,可以同时对多个列进行查询。它可以提高多列查询的性能,但也会增加索引的维护成本。


主键索引主键
	-表不建立主键,也会有个隐藏字段是主键,是主键索引,mysql是基于主键索引构建的b+树,如果没有主键,如果按主键搜索,速度是最快的
辅助索引
	-给某个自己加索引,django  index=True,通过该字段查询,会提高速度,如果字段 变化小(性别,年龄),不要建立普通索引
    	-CREATE INDEX index_id ON tb_student(id);
唯一索引
	-提高访问速度,避免数据重复
    -唯一索引通常使用UNIQUE关键字
    -CREATE UNIQUE INDEX index_id ON tb_student(id);
组合索引
	-django中,class Meta:
     -create index index_name on table_name(字段1,字段2,字段三)
全文索引-->基本不用---》
        全文索引主要用来查找文本中的关键字,只能在 CHAR、VARCHAR 或 TEXT 类型的列上创建。
        在 MySQL 中只有 MyISAM 存储引擎支持全文索引。
        全文索引允许在索引列中插入重复值和空值。
        不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。
        创建全文索引使用 FULLTEXT 关键字

3 事务的特性和隔离级别

1 特性
	1 原子性 要么全部执行成功,要么全部失败回滚。如果一个操作失败,事务会撤销所有对数据库的修改,使数据库回滚到操作前的状态,保持数据的一致性。
    2 一致性 事务开始前和结束后,数据库的完整性约束没有被破坏
    3 隔离性 事务的执行是相互隔离的,保证每个事务在并发执行时不会对其他事务产生干扰。每个事务应该感觉自己是唯一访问数据库的用户,避免不一致的并发读写操作。
    4 持久性 一旦事务提交成功,对数据库的修改就是永久性的,即使发生系统故障或重启,修改的结果也会被保留。
2 隔离级别
	1 读未提交 一个事务可以读取到其他事务未提交的数据,可能出现脏读、不可重复读和幻读的问题。
    2 读已提交 一个事务只能读取到其他事务已提交的数据,避免了脏读的问题,但仍可能出现不可重复读和幻读的问题。
    3 可重复读 在一个事务中,多次读取同一数据集的结果都是一致的,即使其他事务对数据进行了修改。避免了脏读和不可重复读的问题,但仍可能出现幻读的问题。
	4 串行化 最高级别,事务依次串行执行,避免了脏读、不可重复读和幻读的问题。但会降低并发性能,可能产生较大的锁开销。

标签:事务,范式,数据库,全文索引,索引,mysql,主键,三大
From: https://www.cnblogs.com/liyuanxiangls/p/17594018.html

相关文章

  • mysql 查看当前正在被锁定的事务和等待锁的事务信息
    SELECTr.trx_idAS'事务ID',r.trx_stateAS'事务状态',r.trx_startedAS'事务开始时间',r.trx_wait_startedAS'等待开始时间',l.lock_tableAS'表',l.lock_indexAS'索引',l.lock_modeAS......
  • MYSQL中JSON类型介绍
    1json对象的介绍在mysql未支持json数据类型时,我们通常使用varchar、blob或text的数据类型存储json字符串,对mysql来说,用户插入的数据只是序列化后的一个普通的字符串,不会对JSON文档本身的语法合法性做检查,文档的合法性需要用户自己保证。在使用时需要先将整个json对象从数据库读......
  • Mysql高级6-视图
    一、视图介绍视图(View):是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,行和列数据来自,定义视图时查询使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询的结果。 二、创建视图2.1语法create[orreplace]view视图名称......
  • 【Logstash】conf文件mysql多数据源导入elasticsearch配置说明
    #inputplugin输入插件,接收事件源input{jdbc{#定义类型_1type=>"type_1"#mysql的ip、端口以及用到的数据库名jdbc_connection_string=>"jdbc:mysql://localhost:3306/数据库名"#mysql用户名jd......
  • mysql常见错误
    1.C#在centos7的环境下面连接mysql数据库,报错Authenticationmethod'caching_sha2_password'failed.Eitheruseasecureconnection,specifytheserver'sRSApublickeywithServerRSAPublicKeyFile,orsetAllowPublicKeyRetrieval=True.DbType="MySql"......
  • MySQL DML 闪回之 binlog2sql
    一直以来,由于DBA的误操作或者业务bug,导致误删数据的情况都时有发生。当出现误删数据的情况时,从线上操作日志构造误删除的数据,或者DBA使用binlog和备份的方式恢复数据,不管哪种,都非常费时费力,并且容易出错。可能有的同学会说从从库恢复,但实时主从备份只能防止硬件问题,比如主库的......
  • mysql根据mysqlbinlog恢复找回被删除的数据库
    年初和朋友一起做了个项目,到现在还没收到钱呢,今天中午时候突然听说之前的数据库被攻击了,业务数据库全部被删除。看有没有什么办法恢复,要是恢复不了,肯定也别想拿钱了吧?READMEFORRECOVERYDATAAllyourdatabaseswasbackedup.Youneedtoemailusatxednydy@fexbox......
  • mysqldump 导出与导入
    导出数据库脚本(export.sh):#!/bin/bash#数据库连接信息DB_HOST="localhost"DB_USER="root"DB_PASSWORD="password"DB_NAME="your_database_name"#导出表结构和表数据到文件mysqldump-h$DB_HOST-u$DB_USER-p$DB_PASSWORD--no-data--skip-loc......
  • docker-mysql(集群)
    第一步:安装docker+并获取mysql镜像第二步:运行master的mysql容器dockerrun-id\--name=mysql_master\-p3307:3306\-v$PWD/mysql-master/conf:/etc/mysql/conf.d\-v$PWD/mysql-master/logs:/logs\-v$PWD/mysql-master/data:/var/lib/mysql\-eMYSQL_ROOT_PASSWO......
  • mysql的索引机制
    索引的概念索引是一种特殊的数据。保存的是其他数据的位置,查找数据时先查找索引查询数据,提高查找效率。索引是越多越好吗?不是索引的优缺点优点:​ 1.提高查询效率缺点:​ 1.占用额外的磁盘空间​ 2.创建索引需要较长时间​ 3.索引需要维护索引的类型......