(一)约束(Constraint,创建表时加在字段后)
(1)什么是约束?常见的约束有哪些?
(2)唯一性约束(unique):唯一性约束修饰的字段具有唯一性,不能重复。但可以为NULL(多个值为NULL并不代表重复,因为NULL之间不可比较 )。
a:给单一列加约束
b:给多个列加联合约束
(3)主键约束(primary key)推荐使用单一主键,自然主键
(4)外键约束 (重点!) 格式:foreign key(字段名) reference 被引用表名(字段名)
(二)存储引擎(了解即可,知道存储引擎的涵义以及几种常见的存储引擎 )
(1)什么是存储引擎:存储引擎相当于表的存储方式!存储引擎这个名字只在 mysql中存在。每一种存储引擎就对应了一种不同的存储方式。mysql支持很多存储引擎,默认使用的是InnoDB。
(2)MyISAM 存储引擎:
(3)InnoDB 存储引擎:
(4)MEMORY存储引擎:
(三)事务(重点!!!)
注意:mysql事务默认情况下是自动提交的。即:只要执行任意一条DML语句则提交一次。 可以使用 start transaction 关闭自动提交。
rollback只能回滚到上次事务的提交点,已提交部分不可回滚。
(四)索引:(重要)
(五)视图(view)(用的较少)
(六)DBA命令
(七)数据库设计三范式(重点内容,面试经常问!)
(1)什么是设计范式?
答:是设计表的依据,目的是减少数据冗余,按照这个三范式设计的表不会出现数据冗余!
(2)三范式都是那些?
a.第一范式:任何一张表都应该有主键,并且每一个字段符合原子性不可再分。
b.第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
满足第二范式不产生部分依赖的做法:若两张表有多对多关系(如下图中,一个学生可以有多个老师,一个老师也可有多个学生),则需要产生一张关系表,该关系表中有两个外键!(口诀:多对多,三张表,关系表两个外键!)
c.第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。
满足第三范式不产生传递依赖的做法:若两张表有一对多关系(如下图中,一个班级可以有多个学生,但是一个学生只能有一个班级),则需要在多的那个表中(即学生表)加外键!(口诀:一对多,两张表,多的表加外键!)
提醒:在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。(因为表连接越多,需要表联查,sql执行越慢。)
另外:一对一设计有两种方案:1.主键共享; 2. 外键唯一(即 将加外键的表设置为唯一性约束)。
参考:https://www.bilibili.com/video/BV1fx411X7BD?