外键

MySQL数据库--外键

两盒软妹~` 提交于 2019-11-28 00:53:48
一、外键前戏 如果我们把所有的信息都记录在一张表中会带来的问题:   1.表的结构不清晰   2.浪费磁盘空间   3.表的扩展性极差 所以我们要把这种表拆成几张不同的表,分析表与表之间的关系。 确定表与表之间的关系,一定要换位思考(必须两方都考虑周全之后才能得出结论) 学生与班级表: 1.站在学生的角度看班级:能否多个学生在一个班级 (一个班级能否有多个学生) 可以!!! 2.站在班级的角度看学生:能否有多个班级对应一个学生 (一个学生能否在多个班级) 不可以!!! 结论:学生表和班级表之间仅仅只是单向的多对一,那么它们的关系就是“一对多”(无论是多对一还是一对多,都叫‘一对多’) 所以学生表多对一班级表,在学生表中创建一个字段(class_id)指向班级表的id字段。 如何让两种表有代码层面上真正的关联,就必须使用外键 (foreign key) 什么是外键? 让表与表有硬性层面上的关系。 二、一对多 foreign key 外键约束   1.在创建表的时候,必须先创建被关联表   2.插入数据的时候,也必须先插入被关联表的数据 有员工表和部门表,之间是一对多的关系,通常将关系字段称之为外键字段, 建在多的一方 。(这里这个外键建在员工表中) 建表: 先建部门表(被关联表) #部门表 create table dep( id int primary key auto

22、已知外键如何查询表

你说的曾经没有我的故事 提交于 2019-11-28 00:51:40
当删除一条表记录时,如果该表有外键,那么会提示违反完整性约束条件,并给出外键的名称,这个时候我们就需要找到外键所在的表,然后先删除外键的记录,然后才能删除当前表记录 1、根据外键名称和用户名查询外键所在的表的sql语句是: select * from dba_constraints where constraint_name='FK_L7N99RLCBF635PD429OSWJG8B' and owner = 'BLDB'; 2、注意,务必加上用户名 来源: https://www.cnblogs.com/wf2010517141/p/11384063.html

外键、复制表、修改表

与世无争的帅哥 提交于 2019-11-28 00:50:55
前言   提出问题     所有的信息都记录在同一张表中所带来的问题:     1. 表的结构不清晰     2. 浪费硬盘空间     3. 表的扩展性差(这一点是无法忽略的)​​​    解决方案     解耦,拆分表     拆分表 就要搞明白表与表之间的关系   ​​如何确认表与表之间的关系:      “换位思考”,必须两方都考虑周全之后才能得出结论​ 举例:员工表和部门表之间的关系​: ​先站在员工表看是否可以: ​​多个员工对应一个部门 ​​翻译过来:一个部门是否能有多个员工​ ​​可以(所以暂时确认了员工反向多对一部门) 再站在部门表看是否可以: ​​多个部门对应一个员工 ​​翻译过来:一个员工是否可以属于多个部门 ​​不可以​​​​​ 结论:员工表和部门表之间 仅仅是单向的多对一 那么他们的关系就是“一对多” 注意:关系表中没有多对一之说,只有一对多(无论是多对一还是一对多,都叫一对多)​​​​ View Code 表关系之 一对多   1. 在创建表示,先创建被关联的表dep,才能创建关联表emp        create table dep ( id int primary key auto_increment, dep_name char(10), dep_comment char(60)​​ ​​)​; ​ create table emp( id

python day36

假装没事ソ 提交于 2019-11-28 00:43:09
今日内容 表与表之间建关系 外键  一对多  多对多  一对一所有的信息都记录在一张表中所带来的问题 1.表的结构不清晰 2.浪费硬盘空间 3.表的扩展性极差(无法忽略的缺点) PS:类似于我们将所有的代码都写在用一个py文件内 确立表与表之间的关系,一定要换位思考(必须两方都考虑周全之后才能得出结论)以员工表和部门表为例: 先站在员工表看能否有多个员工对应一个部门 分析: 一个部门能否有多个员工 可以!!!(暂时只能确定员工单向多对一部门) 再站在部门表看能否有多个部门对应一个员工 分析: 一个员工能否属于多个部门 不可以!!!结论: 员工表和部门表之间仅仅是 单向的多对一 那么它们的表关系就是 "一对多" 表关系中没有多对一一说,只有一对多 ( 无论是多对一还是一对多都叫"一对多" ) 关于让两种表有代码层面上真正的关联,必须使用外键什么是外键? 让表与表有硬性层面上的关系foreign key 外键约束 1.在创建表的时候 必须先创建被关联表 2.插入数据的时候 也必须先插入被关联表的数据 # 建表 create table dep( id int primary key auto_increment, dep_name varchar(32), dep_desc varchar(128) ); create table emp( id int primary key

MySQL外键及修改表和复制表

让人想犯罪 __ 提交于 2019-11-28 00:32:41
外键 前戏之一对多关系 # 定义一张部门员工表 id name gender dep_name dep_desc 1 jason male 教学部 教书育人 2 egon male 外交部 漂泊游荡 3 tank male 教学部 教书育人 4 kevin male 教学部 教书育人 5 owen female 技术部 技术能力有限部门 """ 把所有数据都存放于一张表的弊端 1.组织结构不清晰 2.浪费硬盘空间 3.扩展性极差 """ # 上述的弊端产生原因类似于把代码全部写在一个py文件中,你应该怎么做?>>>解耦合!将上述一张表拆成员工和部门两张表! # 类似的表关系学生与班级,也是如此,一张学生表和一张班级表 # 分析表数据之间的关系:多个用户对应一个部门,一个部门对应多个用户。禁止一个用户对应多个部门这种情况是另外一张表关系 # 如何查找表与表之间的关系 """ 老师与课程表 1.站在老师表的角度:一名老师能否教授多门课程(限制死,不能,一名老师只能教python,不能同时教python和linux) 2.站在课程表的角度:一门课程能否可以被多个老师教,完全可以! 那就是课程表多对一老师表,如何表示这种关系?在课程表中创建一个字段(tea_id)指向老师表的id字段 学生与班级表 1.站在学生表的角度:??? 2.站在班级表的角度:??? 那就是学生表多对一班级表

查看表的主外键关联关系

廉价感情. 提交于 2019-11-28 00:30:00
select a.owner, --主键拥有者 a.table_name, --主键表 b.column_name, --主键列 c.OWNER, --外键拥有者 c.table_name, --外键表 d.column_name --外键列 from user_constraints a left join user_cons_columns b on a.constraint_name=b.constraint_name left join user_constraints c on c.R_CONSTRAINT_NAME=a.constraint_name left join user_cons_columns d on c.constraint_name=d.constraint_name where a.constraint_type='P' and a.TABLE_NAME='T_USER' --需要查看主外键关系的表 order by a.table_name 来源: https://www.cnblogs.com/xcnd/p/11382763.html

单向关系中的JoinColumn

跟風遠走 提交于 2019-11-27 23:53:24
1.person与address的一对一单向关系: 在address中没有特殊的注解。 在Person中对应到数据库里面就有一个指向Address的外键. 我们也可以增加注释指定外键的列的名字,如下: @OneToOne(cascade=CascadeType.ALL,optional=true) @JoinColumn(name="addressID")//注释本表中指向另一个表的外键。 public Address getAddress() { return address; } 如果我们不加的话,也是可以通过的, 在JBOSS里面,它会自动帮你生成你指向这个类的类名加上下划线再加上id的列,也就是默认列名是:address_id . 如果是主键相关联的话,那么可以运用如下注释 @OneToOne(cascade={CascadeType.ALL}) @PrimaryKeyJoinColumn public Address getAddress( ) { return homeAddress; } 它表示两张表的关联是根据两张表的主键的 ————————————————————————————————————————————————————————————————————— 2.person和phone的一对多单向关系: phone中没有特别的注释。 person中:

jpa关联映射

☆樱花仙子☆ 提交于 2019-11-27 23:44:07
参考: http://www.cnblogs.com/printN/p/6408818.html 官方文档: http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html mapped by= "xx" 这个xx就是主控方即拥有方 单向和双向的区别 : husband和wife是一对一的, 一对一单向 :通过husband可以找到wife,通过wife不能找到husband 一对一双向 :通过husband可以找到wife,通过wife不能找到husband 需要从一方获取另一方的数据时 就使用单向关联 双方都需要获取对方数据时 就使用双向关系 部门---人员 使用人员时 如果只需要获取对应部门信息(user.getDeptarment()) 不需要 从部门下的人员信息时,就配置成单向 多对一 使用部门时 如果只需要获取部门下人员信息(deptartmanet.getUsers()) 不需要 从人员获取部门信息时,就配置成单向 一对多 既要获取部门下人员 deptartmanet.getUsers() 又要从人员获取部门信息 user.getDeptarment() 那就 配置成双向一对多,也就是双向多一 单向多对一: 1、 单向一对一关联外键映射 2、

MySQL基础|外键约束

只谈情不闲聊 提交于 2019-11-27 21:31:21
外键约束 只有InnoDB引擎的数据库才支持外键 创建外键 建表时指定外键 [CONSTRAINT 外键名称] FOREIGN KEY (字段名称) REFERENCES 主表(字段名称) 子表的外键字段和主表的字段类型要相似,如果是数值类型要求一致,无符号也要一致,如果是字符型,要求类型一致,长度可以不同 如果外键的字段没有创建索引,MySql会自动帮我们添加索引 子表的外键关联必须是父表的主键; 外键约束的参照操作 CASCADE 从父表删除或者更新,子表也跟着删除或者更新,级联的操作; SET NULL 从父表删除或者更新记录,并设置子表外键列为null; NO ACTION | RESTRICT 拒绝对父表做更新或者删除操作; 动态添加外键 ALTER TABLE tb_name ADD FOREIGN KEY(外键字段) REFERENCES 主表(主键字段) 注意:动态添加外键之前,表中的数据必须是合法的,没有脏值,否则外键无法正常添加 动态删除外键 ALTER TABLE tb_name DROP FOREIGN KEY fk_name 注意:对于有外键关联的表在进行删除或者更新的时候,需要注意表与表之间的关系,不可以随意进行更新删除 来源: https://blog.csdn.net/lookinthefog/article/details/99735371

表与表之间建立关系

拜拜、爱过 提交于 2019-11-27 20:31:44
将所有的数据都放在一张表内产生弊端:   1 表的组织结构不清晰   2 浪费存储空间   3 可扩展性极差(修改某一个部门的信息的时候~)  类似于所有代码都写在一个py文件,如何优化?   解耦拆分 如何查找表与表之间的关系 以员工和部门表为例。查找表关系需要做到换位思考(站在两边去找表关系)   1 先站在员工表:     找员工表的多条数据能否对应部门表的一条数据     翻译:多个员工能否属于一个部门     可以 之后不能直接下结论,还需要站在部门表的角度再确认关系   2 再站在部门表:     找部门表的多条数据能够对应员工表的一条数据 (人为限制一个部门只能有一个相同员工)     翻译:多个部门能否有同一个员工     不能 只有站在两边表的角度都分析过了,才能够下结论:员工表 单向 多对一部门表 多对一 外键(foreign key) 1 必须要先建立被关联表 create table dep(id int primary key auto_increment, dep_name char(16) , dep_desc char(16)); create table emp (id int primary key auto_increment ,name char(16), gender enum('male','female','others') not