主键与外键的区别?
- 首先主键是用来保持数据完整性的;外键是用来与其他表建立关联的。
- 主键唯一标识一条记录,不能重复,不可以为空;外键可以重复可以为空。
- 主键一张表只有一个但可能存在多个外键。
码、候选码和主码的区别?
码(超键):能够唯一标识一条记录的属性或属性集
候选码(候选键):能够唯一标识一条记录的最少的属性集合
主码(主键):某个能够唯一标识一条记录的最小属性集(是从候选码里人为挑选的一条)
三大范式?
- 第一范式:表的每一列字段不能再分,具有原子性,否则就不是关系型数据库了
- 第二范式:有主键,非主键列必须完全依赖于主键;具有唯一性,一个表只说明一个事物
- 第三范式:非主键列不能相互依赖,不能存在传递依赖
什么是索引?
索引是帮助mysql高效获取数据的一种数据结构。我的理解就是:排好序的方便快速查找的一种数据结构。
Mysql索引使用的数据结构主要有B+Tree索引和哈希索引。
对于单条记录的查询,可以选择哈希索引,查询性能最快;但是哈希索引不适用于范围查询,因此除单条记录查询外其他大部分场景,建议选择B+Tree索引。
索引分类
- 单值索引: 一个索引只包含单个列
- 复合索引: 即一个索引包含多个列
- 唯一索引: 索引列的值必须唯一,但允许有空值
ALTER TABLE `table_name` ADD INDEX index_name ( `column` ); #3.添加INDEX(普通索引)
DROP INDEX [indexName] ON mytable; # 删除:
哪些情况会索引失效?
- 模糊查询like以%开头,索引失效
- 条件中有or,索引失效
- 使用复合索引的时候,没有使用左侧的列查找,索引失效
- 在where当中,索引列参加了运算或者使用了函数,索引失效
Mysql事务的4个特性?
A:原子性:
说明事务是最小的工作单元,不可再分。要么全都执行成功,要么全部失败。
C:一致性:
事务开始前和结束后,数据库的完整性约束没有被破坏,都必须处于一致性状态。
I:隔离性:
不同事务之间彼此互补干扰,具有一定的隔离。
D:持久性:
事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
事务的隔离级别?
有四个隔离级别。
-
读未提交:read uncommitted (最低隔离级别)
概念:事务A可以读取到事务B未提交的数据。
存在的问题:可能会出现脏读现象(我们称读到了脏数据) -
读已提交:read committed
概念:事务A只能读取到事务B提交之后的数据。
存在的问题:解决了脏读问题。但是可能出现不可重复读问题:即某个事务如果重复读取某个数据,每次读取的数据可能不能,可能已经发生了改变。 -
可重复读:repeatable read
概念:就是在开始读取数据(事务开启)时,不再允许其他事务进行修改操作,对数据行加了写锁,可以重复读取某个数据(不会改变)。
存在的问题:解决了不可重复读问题。但是可能出现幻读问题:一个事务按照相同的检索条件重新读取数据,却发现其他事务插入了满足其查询条件的新数据。 -
序列化/串行化:serializable (最高隔离级别)
概念:事务只能串行化执行,一个接一个执行,不能并发执行。虽然序列化的隔离级别解决了上述所有可能出现的问题,但是很明显这样的效率是很低的。
常见的存储引擎?
MyISAM和InnoDB
两种存储引擎的区别:
- InnoDB支持主外键;MyISAM不支持主外键。
- InnoDB支持事务;MyISAM不支持事务。
- InnoDB支持表锁和行锁(默认);MyISAM只支持表锁,因此并发度不高。
- InnoDB是聚集索引,使用B+Tree作为索引结构,数据是和索引绑在一起的,索引和数据存在于同一个文件;MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。
- …
Mysql中的锁?
主要分为表级锁和行级锁
- 表级锁:Mysql中锁定粒度最大的一种锁,对当前操作的整张表加锁,实现简单,加锁快,不会出现死锁。但是它的锁定粒度较大,触发锁冲突的概率最高,并发度最低。
- 行级锁:Mysql中锁定粒度最小的一种锁,只针对当前操作的行进行加锁,大大减小了触发锁冲突的概率,并发度高。但它加锁的开销较大,加锁慢,会出现死锁。
char与varchar的区别?
- char的长度是不可变得;varchar的长度是可变的。
- 如果定义一个char[10]和varchar[10],然后都存入字符串‘abcd’,那么char的长度依然是10,除了字符‘abcd’外,其余用空格填充;而varchar的长度会变成4。
- 虽然char牺牲了空间,但是他的时间效率要比varchar高。
MySQL 的内连接、左连接、右连接有什么区别?
内连接:显示两个表中有联系的所有数据
左连接:显示左表所有数据,以及两表中相关联的数据
右连接:显示右表所有数据,以及两表中相关联的数据
如果有什么问题还希望各位朋友能够帮忙指出,如果对你有帮助可以先点个赞,嘻嘻!!!