1 数据库三大范式是什么
数据库的三大范式是指关系数据库设计中的三个规范化级别,用于规范化数据库中的数据结构,提高数据的一致性和减少数据冗余。这三大范式分别是:
1. 第一范式(1NF):要求数据库表中的每个字段都是原子性的,不可再分。也就是说,每个字段中的数据不能包含多个值或多个属性。如果一个字段中包含了多个值,就需要将其拆分成多个独立的字段。
2. 第二范式(2NF):在满足第一范式的基础上,要求数据库表中的非主键字段必须完全依赖于主键。也就是说,每个非主键字段必须完全依赖于主键,而不能依赖于其他非主键字段。如果存在部分依赖或传递依赖的情况,就需要将其拆分成多个独立的表。
3. 第三范式(3NF):在满足第二范式的基础上,要求数据库表中的非主键字段之间不能存在传递依赖关系。也就是说,每个非主键字段之间应该是互相独立的,不能通过其他非主键字段推导出来。如果存在传递依赖的情况,就需要将其拆分成多个独立的表。
通过遵循这三大范式,可以有效地规范化数据库的结构,减少数据冗余和数据更新异常,提高数据的一致性和查询效率。但需要注意的是,过度规范化也可能导致查询复杂性增加,需要在实际设计中进行权衡。
—
2 mysql有哪些索引类型,分别有什么作用
Mysql索引 可以从 存储方式,逻辑角度,实际使用角度进行分类
存储方式分为 B-树索引和HASH索引两类
B-树索引可以进行全键值、键值范围和键值前缀查询,也可以对查询结果进行 ORDER BY 排序。但 B-树索引必须遵循左边前缀原则,要考虑以下几点约束:
查询必须从索引的最左边的列开始。
查询不能跳过某一索引列,必须按照从左到右的顺序进行匹配。
存储引擎不能使用索引中范围条件右边的列
——
哈希索引
HASH 索引不是基于树形的数据结构查找数据,而是根据索引列对应的哈希值的方法获取表的记录行
逻辑区分
---普通索引
它没有任何限制,唯一任务就是加快系统对数据的访问速度。
普通索引允许在定义索引的列中插入重复值和空值。
创建普通索引时,通常使用的关键字是 INDEX 或 KEY
CREATE INDEX index_id ON tb_student(id);
---唯一索引
唯一索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一。
创建唯一索引通常使用 UNIQUE 关键字。
CREATE UNIQUE INDEX index_id ON tb_student(id);
---主键索引
主键索引是一种特殊的唯一索引,不允许值重复或者值为空。
创建主键索引通常使用 PRIMARY KEY 关键字。不能使用 CREATE INDEX 语句创建主键索引
---空间索引
创建空间索引的列必须将其声明为 NOT NULL,空间索引只能在存储引擎为 MyISAM 的表中创建。
空间索引主要用于地理空间数据类型 GEOMETRY。对于初学者来说,这类索引很少会用到
CREATE SPATIAL INDEX index_line ON tb_student(line);
---全文索引
全文索引允许在索引列中插入重复值和空值。
不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。
创建全文索引使用 FULLTEXT 关键字。
CREATE FULLTEXT INDEX index_info ON tb_student(info);
实际使用区分
单列索引
单列索引就是索引只包含原表的一个列。在表中的单个字段上创建索引,单列索引只根据该字段进行索引。
单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可
CREATE INDEX index_addr ON tb_student(address(4));
多列索引
多列索引是在表的多个字段上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询。但是,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用
CREATE INDEX index_na ON tb_student(name,address);
3 事务的特性和隔离级别
事务的四大特性:
原子性(Atomicity):事务是最小的工作单元,不可再分。
一致性(Consistency):事务必须保证多条DML语句同时成功或同时失败。
隔离性(Isolation):一个事务不会影响其他事务的运行,互不干扰。事务之间隔离,四个隔离级别。
持久性(Durability):事务一旦提交成功,它对数据库中数据的改变就是永久性的
-----------------
第一级别:读未提交 (Read Uncommited)
对方事务还未提交,但当前事务可以读取到对方未提交的数据
读未提交存在脏读现象:表示读到了脏的数据,因为还未提交到硬盘,数据及其不稳定。(所有数据库都是从第二级别起步,第一级别太低)
第二级别:读已提交 (Read Commited)
当前事务只能读取到对方事务已经提交的数据。由于未提交的读不到,则解决了脏读现象。
存在的问题:不可重复读,即可能每次读的数据不一样,做不到数据从头到尾查的数据是一样的
第三级别:可重复读 (Repetable Read)
第四级别: 序列化(串行)读 (Serializable) (同步)
解决了所有问题
但是效率低,需要事务排队
使用第三方的话不安全怎么办?
基于官方api封装,一定意义上来说稳定,但是还是无法规避不安全的成分在,但是就算换做人工来说,相似无二。
更多 链接查看
https://blog.csdn.net/DominicJi/article/details/83861977?ops_request_misc=&request_id=&biz_id=102&utm_term=python%E8%80%81%E7%94%B7%E5%AD%A9%E6%9C%88%E8%80%83&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-83861977.142
https://blog.csdn.net/CXY00000/article/details/121341136
标签:INDEX,面试题,范式,CREATE,事务,索引,概述,一些,主键 From: https://www.cnblogs.com/wzh366/p/18037119