Python 40 数据库-外键约束 、多对一与多对多的处理
mysql提供了 foreign key,专门用于为表和表之间 建立物理关联
思考
表里存储的是一条条的记录,两个表之间能产生的关系有哪些?
现有 A B两张表
1.多对一
2.一对一
3.多对多
在查找表之间的关系时,要分别站在,不同表去思考,如果两个得到的关系不同,则认为这种多对一关系是单向
一对一 ******
生活中的一对一 客户表, 学员表
通过分析
一个客户只对应一个学员
一个学员只对应一个客户
所以确定关系为一对一
在mysql中通过外键来建立一对一
多对多关系的处理:
建立一个第三方表 专门存储两个表之间的关系
这个关系表 应该有两个字段 分别关联学生的id 和老师的id
为了保证 数据的合法性 完整性 给这两个字段都添加外键约束
为了避免重复无用的关系数据 关系表加上关联的主键约束
总结: 外键的作用 表与表之间建立联系添加外键约束时: 产生的限制被关联的表需要先被创建
部门数据(主表)应该先插入 员工数据(从表)后插入
在删除部门数据前(主表)前 要保证该部门的员工数据都删除了
在更新部门编号前 要先保证没有员工关联到这个部门
简单的说,外键指的是 另一张的主键,外键加上以后,主表中的数据 删除 和更新时 都受到限制,解决的方案是为 外键 添加 级联操作
什么是联机操作?
指的是就是同步更新和删除
语法:
在创建外键时在后面添加
on update cascade 同步更新
on delete cascade 同步删除
对主表的id进行更新,以及删除某条主表记录 来验证效果
Python 40 数据库-外键约束 、多对一与多对多的处理的更多相关文章
- MySQL数据库--外键约束及外键使用
什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...
- MySQL数据库(4)_MySQL数据库外键约束、表查询
一.外键约束 创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...
- Mysql 使用delete drop truncate 删除数据时受外键约束影响解决方案
先禁用数据库的外键约束: set foreign_key_checks=0; 进行删除操作 delete.drop.truncate 恢复数据库外键约束: set foreign_key_checks ...
- MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别
DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...
- 数据库 SQL 外键约束 多表查询
多表设计与多表查询 1.外键约束 表是用来保存现实生活中的数据的,而现实生活中数据和数据之间往往具有一定的关系,我们在使用表来存储数据时,可以明确的声明表和表之前的依赖关系,命令数据库来 ...
- 第二百八十节,MySQL数据库-外键链表之一对多,多对多
MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...
- MySQL基础9-主键约束、外键约束、等值连接查询、一对一和多对多关系
1.主键约束和外键约束 外键约束 * 外键必须是另一表的主键的值(外键要引用主键!) * 外键可以重复 * 外键可以为空 * 一张表中可以有多个外键! 概念模型在数据库中成为表 数据库表中的多对一关系 ...
- sql操作数据库(3)-->外键约束、数据库表之间的关系、三大范式、多表查询、事务
外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter t ...
- MySQL数据库有外键约束时使用truncate命令的办法
MySQL数据库操作中,Delete与Truncate两个命令都可以删除一个数据表中的全部数据,使用办法分别是: DELETE FROM t_question TRUNCATE TABLE t_que ...
随机推荐
- python笔记之发送邮件
发送邮件前提:开启邮箱授权码 一.开启授权码(以163邮箱为例) 1.登录163邮箱,点击设置--POP3/SMTP/IMAP,出现设置界面 2. 开启SMTP服务且可以查询SMTP的host地址 ...
- mybatis 项目配置
第一:environments MyBatis 支持多个环境,可以任意配置: 第二:transactionManager MyBatis 支持两种类型的事务管理器:JDBC 和 MANAGED(托管) ...
- 基于owncloud构建私有云储存网盘
注意事项:需要ping通外网 需要LAMP架构yum -y install httpd php php-mysql mariadb-server mariadb sqlite php-dom php- ...
- C# 后台POST提交方式
1.第一种方式:用最新框架,但是针对IIS服务器的操作系统有关系,非R2的收不到数据: using (var reqConts = new MultipartFormDataContent()) { ...
- chrony配置介绍
rhel7 文档https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Adminis ...
- sql server的 between and 日期问题
- 【Codeforces 158A】Next Round
[链接] 我是链接,点我呀:) [题意] 让你找到排名的前k名,并列的话,如果分数大于0那么就算晋级 问你最后有多少人可以晋级. [题解] 按照题意模拟就好, 先按照a[max] = a[k]的规则找 ...
- 创建序列化器,序列化管理器,closureSerializer
创建序列化器,序列化管理器,closureSerializer //通过反射创建序列化对象 // Create an instance of the class with the given name ...
- oracle导入少量数据(少于10M)
工具用PL/SQL Developer select * from temp1 for update;开锁,点+号,直接从Excel复制,然后粘贴. 程序猿必读
- [bzoj3529][Sdoi2014]数表_树状数组_莫比乌斯反演
数表 bzoj-3529 Sdoi-2014 题目大意:n*m的数表,第i行第j列的数是同时整除i和j的所有自然数之和.给定a,求数表中所有不超过a的和. 注释:$1\le n,m \le 10^5$ ...