我们学了很多的东西,编程的学习之中更重要的是坚持。今天我们和大家分享的是什么是外键约束,以及什么是表的结构。我们废话不多说,马上开始我们今天的分享。开发工具:IDLE(Python3.-bit或者32-bit),pycharm(professional的版本),Ubuntu,xshell6(注:不需要3.7版本的也行,只需要Python3的版本都可以)1.什么是MySQL(数据库)?
MYSQLmysql是关系型数据库,关系数据库,是建立在关系模型基础上的数据库,现实世界中的各种实体,以及实体之间的各种联系,均用关系模型(table)来表示。
关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。实体:就是数据对象(可以是有类型的,也可以是无类型的).E-R图(实体关系模型)
E-R图E-R图也称实体-联系图(EntityRelationshipDiagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名。并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。2.外键约束
外键约束FOREIGNKEY,保持数据一致性,完整性实现一对一或一对多关系。因为一个表只存一类信息。用外键来做参照,保证数据的一致性,可以减少数据冗余。外键约束的要求:1.数据表的存储引擎只能为InnoDB;
2.外键列和参照列数据类型一致;
3.外键必须关联到键上面去,一般情况是关联到,另一张表的主键。
准备工作新建一个名为a的表违反主键约束外键约束的实现删除外键
查看表的详情删除外键新建外键
添加外键3.外键的实际运用
一对多的关系创建一个学院表
新建一个学院表并向内添加数据将一个不同列关联到另外一个表的主键学生表中的学院id只能由我们的学院id产生。
添加数据注意:只要在INSERTINTO`student`(`s_name`,`dept_id`)VALUES(张三,1);插入数据的时候报错,系统就会默认当前那个一个顺序的数据自动失效,再继续插入数据的的时候,排序往后一位排序。
一对多的实现就是在学生表(student)中的dept_id这里,添加一个外键constraintSD_idforeignkey(dept_id)referencesdepartment(d_id)关联到我们学院表department中的(d_idintprimarykeyAUTO_INCREMENT,)的id里面。
这就代表着只有学院表(department)中有的数据,你才能在(constraintSD_idforeignkey(dept_id)referencesdepartment(d_id))中才能插入数据,不然你就无法插入数据,这样就实现了一对多的关系。
4.一对一的关系
举个例子:学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只有一条详细信息。用外键加主键的方式来实现这种关系。
已建的学生表主键映射主键的方法就可以实现一对一的关系。
一对一的关系新建一个学生详细信息表一对一的实现一对一是怎么实现的呢?注意看示范,我们在插入值的时候是按照学生表(student)中的s_idintprimarykeyAUTO_INCREMENT,中的主键(s_id)来插入数据的,我们的学生详细信息表(student_details),是将`id`INTPRIMARYKEY,它的id作为主键,这样FOREIGNKEY(`id`)REFERENCES`student`(`s_id`)将外键与学生表的主键对应起来,使得数据唯一,实现功能。
5.多对多的关系
举例子:学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。
新建课程表将数据插入课程表中多对多的关系FOREIGNKEY(`s_id`)REFERENCES`student`(`s_id`),这使得只有学生表中的数据(学生)才可以选择课程表中的课程。
FOREIGNKEY(`crs_id`)REFERENCES`course`(`id`),这样使得只有课程表中存在的数据(课程),你才可以选择,防止有人捣乱。
中间表记录选课内容所有的选课信息6.查询中一些较为常见的函数
求最大年龄:mysqlSELECTMAX(`age`)FROM`student_details`;求最小年龄:mysqlSELECTMIN(`age`)FROM`student_details`;求和:mysqlSELECTSUM(`age`)FROM`student_details`;求平均数:mysqlSELECTAVG(`age`)FROM`student_details`;四舍五入:mysqlSELECTROUND(AVG(`age`))FROM`student_details`;统计:mysqlselectcount(s_id)fromstudent;查看当前时间:mysqlSELECTNOW();
今天就和大家分享到这吧!希望大家对大家学习MySQL有一些帮助,今天的内容不太多请记得将小编的示范多练习几次就好了。学习编程是一件孤单的心事,大家加油!小编也在一直在学习的路上,大家一起进步。