哈喽大家好,我是阿Q,今天我们来总结一下【MySQL】 入门的必备知识点吧~
对于外键和级联,阿里巴巴开发手册这样说到:
【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
说明: 以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群; 级联更新是强阻塞,存在数据库更新风暴的风 险; 外键影响数据库的插入速度。
如果不涉及到分库分表,并发量不是很高的可以考虑外键。
E-R 图 也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 它是描述现实世界关系概念模型的有效方法,是表示概念关系模型的一种方式。
下图是一个学生选课的 ER 图,每个学生可以选若干门课程,同一门课程也可以被若干人选择,所以它们之间的关系是多对多(M: N)。另外,还有其他两种关系是:1 对 1(1:1)、1 对多(1: N)。
我们试着将上面的 ER 图转换成数据库实际的关系模型(实际设计中,我们通常会将任课教师也作为一个实体来处理)
属性(对应于表中的字段)不能再被分割,也就是这个字段只能是一个值,不能再分为多个其他的字段了。1NF 是所有关系型数据库的最基本要求 ,也就是说关系型数据库中创建的表一定满足第一范式。
2NF 在 1NF 的基础之上,消除了非主属性对于码的部分函数依赖。
举例1:比如学生表中有学号、姓名、系名、课名、分数字段,其中(学号、课名)能唯一确定一条数据,所以(学号、课名)就被称为码,则学号、课名分别被称为主属性,其它的字段便为非主属性。此时(学号、课名)能确定唯一的学生姓名,但是学号也可以确定,这就是非主属性(姓名)对于码(学号、课名)的部分函数依赖。
举例2:比如学生表中有学号、姓名、系名、课名、分数字段,我们把它拆成学号、课名、分数表(表一)和学号、姓名、系名表(表二)。
如下图所示,展示了第一范式到第二范式的过渡。第二范式在第一范式的基础上增加了一个列,这个列称为主键,非主属性都依赖于主键。
3NF 在 2NF 的基础之上,消除了非主属性对于码的传递函数依赖。符合 3NF 要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。
举例:比如学生表中有学号、姓名、系名、系主任字段,学号是码,非主属性是姓名、系名、系主任。其中系名依赖于学号,系主任依赖于系名,所以存在非主属性(系主任)对于码(学号)的传递依赖,所以该表不符合3NF的要求,可以将表拆为(学号,姓名,系名)和(系名、系主任)。
我们可以把存储过程看成是一些 SQL 语句的集合,中间加了点逻辑控制语句。
存储过程在业务比较复杂的时候是非常实用的,比如很多时候我们完成一个操作可能需要写一大串 SQL 语句,这时候我们就可以写一个存储过程,这样也方便我们下一次的调用。
存储过程一旦调试完成通过后就能稳定运行,另外,使用存储过程比单纯 SQL 语句执行要快,因为存储过程是预编译过的。
存储过程在互联网公司应用不多,因为存储过程难以调试和扩展,而且没有移植性,还会消耗数据库资源。
阿里巴巴 Java 开发手册里要求禁止使用存储过程。
上一篇:实现用户操作日志记录