实体关系

 表设计

1:1

两个实体表内,存在相同的主键字段

如果记录的主键值等于另一个关系表内记录的主键值,则两条记录的对应为一一对应

优化上称为垂直分割

1n

一个实体对应多个其他实体(一个班级对应多个学生)

设计:在多的那段增加一个字段,用于指向该实体所属的另外实体的标识

M:n

多对多

设计典型的利用一个中间表表示实体之间的对应关系。中间表的每一条记录表示一个关系。

 可以分析:一个m:n可拆解为 1:m  1:n来实现

外键 foreign key

概念:如果一个实体(student)的某个字段(student:class_id)指向(引用)另一个实体(class)的主键(class:class_id)

就称student实体的class_id是这两个实体关联的外键。

被指向的实体称为主实体(主表),也叫父实体(父表)

负责指向的实体称为从实体(从表),也叫子实体(子表)

一般在哪个表里定义外键 这个表就是子表

作用:

约束处于关系内的实体

  增加子表记录时,是否有与之对应的父表记录。删除和更新主表记录时,从表应该如何处理与之相关的记录。

定义一个外键

在从表上增加一个外键字段,指向主表的主键  使用关键字 foreign key

Foreign key (外键字段) references 主表名 (关联字段) [主表记录删除时动作][主表记录更新时记录]

建完表后插入

在子表增加记录时,父表中必须有与之对应的记录存在

设置级联操作

 在主表数据发生改变时,与之关联的从表数据该如何变化

主表更新

主表删除

使用关键字on update,on delete来标识

允许的级联操作:

 Cascade:关联操作如果主表被删除,那么从表也会执行相关的操作

 Set null : 设置为null表示从表不指向任何主表记录

 Restrict :拒绝主表的相关操作

修改外键:先删除再新建外键,通过修改表来完成。

Alter table student drop foreign key (class_id) 有问题

删除外键需要通过指定外键名达到目的

可以通过创建外键时指定名称或者使用Mysql默认生成的名称

新建外键:

Alter table student add foreign key (class_id) references class (class_id)

 On delete set null

注意关联的字段必须类型一致

class_id定义时要能为null

On update指的是只有主表的主键发生变化,才能对从表产生影响。

现在表中数据默认都是restrict show 里默认不显示

Php实际项目中只有关联,不设置外键,删除或更新时通过sql语句叠加操作

有名无实,在支持外键的存储引擎表中才能使用(只有innodb

mysql实体关系(mysql学习五)的更多相关文章

  1. mysql实体关系

    数据库连接细节架构: 数据库编码: 关系数据库玩的是生活中物与物之间的关系.那么数据库要保存数据,事先就要描述情况数据如何保存.事务之间的关系如何处理等等. 现实生活中物称为实体,如商品,学生,文章, ...

  2. day04关于MySqL—Android小白的学习笔记

    Mysql入门 1. 数据库基本知识(了解) 1.1.数据库介绍 1.1.1.什么是数据库?数据库的作用是什么? 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户 ...

  3. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句

    MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...

  4. MySQL实战45讲学习笔记:第三十九讲

    一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧 ...

  5. MySQL实战45讲学习笔记:第二十四讲

    一.引子 在前面的文章中,我不止一次地和你提到了 binlog,大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致 ...

  6. 基于【 MySql 】二 || mysql详细学习笔记

    mysql重点学习笔记 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysql ...

  7. MySQL事务控制语句(学习笔记)

    MySQL事务控制语句(学习笔记) MySQL事务控制语句         在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作.因此开启一个事务必须使用begi ...

  8. 深挖计算机基础:MySQL实战45讲学习笔记

    参考极客时间专栏<MySQL实战45讲>学习笔记 一.基础篇(8讲) MySQL实战45讲学习笔记:第一讲 MySQL实战45讲学习笔记:第二讲 MySQL实战45讲学习笔记:第三讲 My ...

  9. MySQL实战45讲学习笔记:第二十九讲

    一.引子 我在第25和27篇文章中,和你介绍了主备切换流程.通过这些内容的讲解,你应该已经很清楚了:在一主一备的双 M 架构里,主备切换只需要把客户端流量切到备库:而在一主多从架构里,主备切换除了要把 ...

随机推荐

  1. Innosetup中将bat文件压缩到压缩包中

      有时候在安装的过程中需要调用某些文件(bat或者exe等文件),但是只需要使用一次,然后就可以删掉该文件, 在Innosetup中应该这样操作: 1.在.iss脚本的[Files]章节写下: So ...

  2. Delphi Socket 阻塞线程下为什么不触发OnRead和OnWrite事件

    //**********************************************************************************//说明: 阻塞线程下为什么不触 ...

  3. MongoDB 多条件组合查询

    组合条件查询json格式语法 { "$and": [ { "Date": { $gt: ISODate("2015-06-05T00:45:00.00 ...

  4. [转载]python中将普通对象作为 字典类(dict) 使用

    目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __ ...

  5. (medium)LeetCode 229.Majority Element II

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...

  6. SVN小小用法(一)svn服务器搭建

    最近由于公司项目用SVN作为版本控制工具,本着学一点是一点的原则,今天小配了下svn,给大家介绍一下 软件:TortoiseSVN-1.8.3.24901-win32-svn-1.8.4.msi(本人 ...

  7. The Ninth Hunan Collegiate Programming Contest (2013) Problem A

    Problem A Almost Palindrome Given a line of text, find the longest almost-palindrome substring. A st ...

  8. windows Phone 浏览器窗口的尺寸

    移动设备的屏幕一般都比PC小很多,移动设备的浏览器会将一个较大的  “虚拟”  窗口映射到移动设备的屏幕上,然后按一定的比例(3:1或2:1)进行缩放.也就是说当我们加载一个普通网页的时候,移动浏览器 ...

  9. POJ2376_Cleaning Shifts_C++

    题目:http://poj.org/problem?id=2376 英文题强行看不懂,只看的懂输入输出,输入n,m,下接n行每行一个区间两个数左端点 l,有端点 r 给出n个闭区间,求选择最少的区间能 ...

  10. [Mongo] 简单的操作命令

    1. 连接服务器: mongo 2. 连接数据库 use dbname 3. 查询所有集合的名字 db.getCollectionNames() 4. 查询某集合的数据 db.collection.f ...