mysql数据库,外键约束和表关系

E-R 图 (实体关系模型)

E-R图也称实体-联系图(Entity Relationship Diagram),
  提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

  它是描述现实世界关系概念模型的有效方法。

  是表示概念关系模型的一种方式。

  用“矩形框”表示实体型,矩形框内写明实体名称;

  用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;

  用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时

    在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。  

外键约束

  外键约束 foreign key,保持数据一致性,完整性实现一对一或一对多关系。(因为一个表只存一类信息。用外键来做参照,

保证数据的一致性,可以减少数据冗余)

  外键约束的要求:

    数据表的存储引擎只能为InnoDB;

    外键列和参照列数据类型一致;

    外键必须关联到键上面去,一般情况是关联到,另一张表的主键.

建立外键约束:

  建一个表a

  

  再建一个表b,并给它外键约束:

  

  建立外键约束的语句:constraint `外键名` foreign key(ab_id) references `a`(a_id);

            foreign key(ab_id) references `a`(a_id);   默认给予外键名,不会重复。

删除外键: alter table `b` drop foreign key dc_id;

  

增加外键:

  

  注意这里没有指定外键名,我们可以查看它的名字:

  

一对多关系

  举例:学校中一个学院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对

多的关系,通过外键关联来实现这种关系。

  建立一个学院表和一个学生表,学生表有一个非空字段ss_id,将它关联到学院的编号(school_id),即学生必须属于某一个学

院。

  

  

  给school表插入数据:

  

  给student表插入数据:

  

  如果插入数据时,ss_id 的值在school表的school_id值中没有则会报错;

一对一关系

  举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当

中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只

有一条详细信息。用外键加主键的方式来实现这种关系。

  

多对多关系:

  举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多

对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。

  先建立课程表:

  

  再建立中间表student_course:

  

  s_id对应于学生表的学生学号;c_id 对应于课程表的课程编号。

查询中一些较为常见的函数

#求最大年龄     mysql> SELECT MAX(`age`) FROM `student_details`;

  

#求最小年龄:

  

#其他一些操作:

  

原文地址:https://www.cnblogs.com/dan-baishucaizi/p/8317802.html

时间: 2024-12-19 17:57:18

mysql数据库,外键约束和表关系的相关文章

MySQL数据库 外键,级联, 修改表的操作

1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - 将所有数据存放在一张表中的弊端: 1.结构不清晰 ---> 不致命 2.浪费空间 ---> 不致命 3.可扩展性极差 ---> 不可忽视的弊端 - 类似于将所有python代码存放在一个py文件中,强耦合到一起了----> 解耦合 ----> 拆分表 - 拆分表解决以上问题.

mysql数据库--外键的三种关系

主要内容: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出两张表之间的关系 分析步骤: #1.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #2.再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

MySQL的外键约束:Cascade/Restrict/No action/SET NULL

转自:http://blog.csdn.net/cnjsnt_s/article/details/5548280 具体使用时需要参考:http://blog.csdn.net/codeforme/article/details/5539454 (注:没看很明白,囧.) MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: [CONSTRAINT [symbol]] FOREIGN KEY [index_nam

第二百八十节,MySQL数据库-外键链表之一对多

MySQL数据库-外键链表之一对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系 一对多:就是b表的某一个字段值对应a表外键里的多个值,前提是a表要与b表链表

MySQL 建立外键约束

http://www.jzxue.com/shujuku/mysql/201109/06-8742.html MySQL 建立外键约束的语法太晦涩难懂了, 不得不记下笔记. 1. 在建表时建立外键 CREATE TABLE table_s ( `id` int(11) NOT NULL AUTO_INCREMENT, `column_name_from` int(11) NOT NULL, `name` varchar(256) NOT NULL, PRIMARY KEY (`id`), IND

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not null auto_increment primary key, name varchar(10), age int, part_nid int )engine=innodb default charset=utf8; create table part( nid int not null auto_in

sql server解决无法删除修改拥有外键约束的表或表的记录字段

sql server解决无法删除修改拥有外键约束的表或表的记录字段 问题如下: or 解决步骤: 1.找出该表的所有外键约束 select * from sys.foreign_keys where referenced_object_id=object_id('订单') order by 1 2.删除所有外键约束(注意外键的名字和表的名字分别是哪个!) alter table 订货项目 drop constraint FK__订货项目__订单编号__412EB0B6; 到这就可以把表删掉了~

数据库 SQL 外键约束 多表查询

多表设计与多表查询 1.外键约束        表是用来保存现实生活中的数据的,而现实生活中数据和数据之间往往具有一定的关系,我们在使用表来存储数据时,可以明确的声明表和表之前的依赖关系,命令数据库来帮我们维护这种关系,像这种约束就叫做外键约束.          定义外键约束  foreign key(本表的列名 ordersid) references orders(id)(引用的表明及列名)     create table dept(         id int primary key

MySQL 如何删除有外键约束的表数据

-- 禁用外键约束 SET FOREIGN_KEY_CHECKS=0; -- 删除数据 truncate table stockTBL; -- 启动外键约束 SET FOREIGN_KEY_CHECKS=1; -- 查看当前FOREIGN_KEY_CHECKS的值,可用如下命令: SELECT @@FOREIGN_KEY_CHECKS;