数据库mysql
建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。
外键作用: 使两张表形成关联,外键只能引用外表中的列的值!
指定主键关键字: foreign key(列名)
引用外键关键字: references <外键表名>(外键列名)
事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action
例如:
outTable表 主键 id 类型 int
创建含有外键的表: create table temp( id int, name char(20), foreign key(id) references outTable(id) on delete cascade on update cascade);
说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。
自己实践 才能完全了解外键的作用 关键是:事件触发限制的作用
-
[新人求助,谢谢大家]powerdesigner怎么设置引用多个外键的主键
2015-05-11 23:57:32这样的多个外键user-id在powerdesigner中应该如何添加外键? ps:user表:学校教务系统信息表 user-id:学校教务系统登录用户ID(学号sno或教师号tno) [img=... -
Hibernate关系映射级别注解(一对一双向外键关联、一对一双向外键联合主键)
2017-10-18 15:52:58一对一双向外键关联这个一对一双向外键关联要怎么理解,双方都持有对方的引用,也就是你中有我,我中有你。 以前一篇的例子来说,学生方持有身份证类的引用,身份证类也持有一个学生对象的引用,这两个引用都充当...一对一双向外键关联
这个一对一双向外键关联要怎么理解,双方都持有对方的引用,也就是你中有我,我中有你。
以前一篇的例子来说,学生方持有身份证类的引用,身份证类也持有一个学生对象的引用,这两个引用都充当各自表中的外键。主控方的配置和一对一单向外键关联中的是一样的,不一样的地方是被控方。被控方的引用属性上边也要加上@OneToOne注解,其中要设置一下mappedBy属性,这个mappedBy属性指定了把控制权交给了主控方,这里要指定主控方对应的外键属性。
这里要注意,双向关联,必须设置mappedBy属性。因为双向关联只能交给一方去控制,不可能在双方都设置外键保存关联关系,否则双方都无法保存。之前的例子中,主控方Students类不需要改变,主要修改身份证类。加一个
private Students stu
并进行封装。注意对于前边的pid的注解是写在属性上边而不是get方法上边,所以stu的注解也是写在属性的上方,要保持一致。@OneToOne(mappedBy="card") private Students stu;
然后要注意在配置文档中进行配置
<mapping class="oto_bfk.Students"/> <mapping class="oto_bfk.IdCard"/>
然后是测试类,测试方法不需要改变,结果没有问题。
一对一双向外键联合主键
联合主键需要借助主键类来实现
首先我们要创建一个主键类,这个主键类要添加一个@Embeddable注解。
主键类必须实现Serializable接口,重写hashCode和equals方法。然后在创建一个实体类,在实体类所对应的联合主键属性上边添加@EmbeddedId这个属性级别注解
-
一张表两个主键 在另外一张表中怎么用外键引用它?
2014-05-30 08:04:50一张表两个主键 在另外一张表中怎么用外键引用它? 麻烦帮忙解决一下。 非常感谢。 -
联合主键在另一张表中如何用外键引用
2015-05-07 02:45:08我在Shop 表中创建了一个主键(ID,UserID)(因为多张表分别需要用到这其中的一个列名),在另一张表创建外键引用时报错: "消息 1776,级别 16,状态 0,第 1 行 在被引用表 'Shop' 中没有与外键 'FK__Product' 中... -
ODBC INSERT语句怎么向多个表插入数据,有主键和外键引用的。怎么可以不用一条一条插
2017-05-06 16:49:12怎么向多个表中插入数据。。比如有五六个表,类似student,course,speciality,teacher这些表。 一条一条插入很麻烦吧,应该有更好的方法。但我只会用一条一条插入 能不能用循环一次性插很多条。我只能实现一次插... -
mysql怎么定义外键
2014-05-18 19:22:00数据库mysql 建立外键的... 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键表名>(外键列名) 事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制...转载于:https://www.cnblogs.com/zhujiabin/p/3735537.html
-
mysql非唯一索引怎么表示_外键可以引用非唯一索引吗?
2021-01-28 08:39:36发生这种情况时,通常意味着两个外键相互链接。通常,包含键作为主键的表甚至不在架构中。示例:两个表COLLEGES和STUDENTS都包含一个名为ZIPCODE的列。如果我们快速检查一下SELECT * FROM COLLEGES JOIN STUDENTS ON...发生这种情况时,通常意味着两个外键相互链接。通常,包含键作为主键的表甚至不在架构中。
示例:两个表COLLEGES和STUDENTS都包含一个名为ZIPCODE的列。
如果我们快速检查一下
SELECT * FROM COLLEGES JOIN STUDENTS ON COLLEGES.ZIPCODE = STUDENTS.ZIPCODE
我们可能发现这种关系是多对多的。如果我们的架构中有一个名为ZIPCODES的表,且具有主键ZIPCODE,那么显然发生了什么。
但是我们的架构没有这样的表。但是,仅仅因为我们的模式没有这样的表并不意味着不存在这样的数据。在USPO土地上的某个地方,有一张桌子。而且,即使我们不认可该表,但COLLEGES.ZIPCODE和STUDENTS.ZIPCODE都是对该表的引用。
与构建数据库的实践相比,这更多地与数据的哲学有关,但是它巧妙地说明了一些基本知识:数据具有我们发现的特征,而不仅仅是我们发明的特征。当然,我们发现的可能是其他人发明的。ZIPCODE肯定是这种情况。
-
主从表主键外键
2009-07-15 17:08:00A表的主键在B表中充当外键,谁是主表,谁是子表? A为主表B为从表 个人认为: 外键是约束的一种。...有两个表 A表中的C字段里面的内容是B表中的主键,并且值有多个,请问数据库该怎么设计啊?create table B(C ch...
A表的主键在B表中充当外键,谁是主表,谁是子表?A为主表
B为从表个人认为:
外键是约束的一种。不存在主从关系,只存在引用关系,如部门表与员工表。
每个员工都属于某个部门,必须与某个部门资料对应。
主从表的情况:类似于订单表与订单明细表的关系。
希望以上有所帮助.有两个表 A表中的C字段里面的内容是B表中的主键,并且值有多个,请问数据库该怎么设计啊?
create table B
(
C char(6) primary key,
C_Name varchar(50) not null
)
go
create table A
(
A_ID char(6) primary key,
A_Name varchar(100) not null,
C char(6) references B(C) --将A表中C字段设置外键
)
go从表的外键与主表的主键的列名必须相同吗?值呢?
列名不一定要相同,但是外键的取值要么从主键的域中取要么取空值,这在数据库中叫做参照完整性规则。主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:
关系数据库依赖于主键---它是数据库物理模式的基石。主键在物理层面上只有两个用途:
1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象。
基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:
1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
2. 主键应该是单列的,以便提高连接和筛选操作的效率。
注:使用复合键的人通常有两个理由为自己开脱,而这两个理由都是错误的。其一是主键应当具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。
3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。
注:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。
4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。
转载于:https://www.cnblogs.com/highmayor/archive/2009/07/15/1524289.html
-
jpa中复合主键并且都是外键,请问怎么写注解?
2009-07-29 23:09:40jpa中复合主键并且都是外键,请问怎么写注解? 比如:有个好友表tfriend 有两个字段:用户ID(userId)、好友ID(friendId) 这个两个字段都是引用用户表tuser的主键; 我要用注解来对实体好友类怎么写??? ... -
Oracle 怎么查询一个数据库中有几个表引用了其中某个特定表的主键做为其外键的...
2012-03-15 13:15:46怎么查询一个数据库中有几个表引用了其中某个特定表的主键做为其外键的select t.table_name from user_constraints twhere t.constraint_type='R' and t.r_constraint_namein(select s.constraint_name from user_... -
mysql中外链接怎么定义_在MySQL中定义外键
2021-02-02 03:41:41指定主键关键字: foreign key(列名)引用外键关键字: references (外键列名)事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Nul... -
mysql的外键与自增矛盾了
2015-05-11 11:07:28问题很简单:table A中的属性aid...table B中的属性bid是自增的主键,引用A中的aid作为外键。那么,B中的aid如果设为自增,B中就有两个自增,是不行的;如果不设为自增,又与A中的aid自增矛盾。请问这个问题怎么解决? -
一对一单向外键关联
2013-12-09 13:05:00新建两个类,Husband.java和Wife.java两个类的id号是一一对应的,用面向对象的方式是加引用,单向关联就是只在其中一个加引用,在数据库中怎么设计呢? 第一种是在husband里面加一个外键,在生成husband的时候,... -
JPA中复合主键的映射
2012-01-11 12:01:59由于航线的主键为复合主键,在航班类中要引用航线的主键做为外键 该怎么使用呢?下面是用法: 1、创建复合主键类 需要实现序列化接口和重写hashcode和equals方法 Jpa注解的用法见代码吧... -
怎么查看字段上的索引 是否引用上
2013-03-14 17:33:141、表的主键、外键必须有索引; 2、数据量超过300的表应该有索引; 3、经常与其他表进行连接的表,在连接字段上应该建立索引; 4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 5... -
数据库在一对一、一对多、多对多怎么设计表关系
2018-06-26 09:39:001、一对一可以两个实体设计在一个数据库中l例如设计一个夫妻表,里面放丈夫和妻子 2、一对多可以建两张表,将一这一方的主键作为多...首先,外键引用的那个列在主表中必须是主键列或者唯一列。所以1:n的肯定把外键... -
mybatis中参数是两个实体类怎么处理_Mybatis的级联查询
2021-01-23 04:28:45如果表 A 中有一个外键引用了表 B 的主键,A 表就是子表,B 表就是父表。当查询表 A 的数据时,通过表 A 的外键将表 B 的相关记录返回,这就是级联查询。例如,当查询一个人的信息时,同时根据外键(身份证号)将他的... -
mysql一对多如何设计_数据库在一对一、一对多、多对多怎么设计表关系
2021-01-19 17:19:281、一对一可以两个实体设计在一个...将另外两个表的主键放到这个表中(如教师和学生就是多对多的关系)关于外键的设置:首先,外键引用的那个列在主表中必须是主键列或者唯一列。所以1:n的肯定把外键建立在n的那张表... -
mysql班级学生 一对多怎样设计表_数据库在一对一、一对多、多对多怎么设计表关系...
2021-01-28 05:22:361、一对一可以两个实体设计在一个...将另外两个表的主键放到这个表中(如教师和学生就是多对多的关系)关于外键的设置:首先,外键引用的那个列在主表中必须是主键列或者唯一列。所以1:n的肯定把外键建立在n的那张表... -
闲来无事,复习复习以前的东西---hibernate中的关联映射图解----一对一
2013-02-26 15:08:52注意:一对一主键关联映射让两个对象的id保持相同,这样可以避免多于的字段被创建,标签的含义指示hibernate怎么加载它的关联对象,默认根据主键加载,onstrained="true"表明通过一个外键引用对主键进行约束,换 -
mysql怎么约束_MySQL 约束详解
2021-02-03 13:30:10引用完整性:保证两张表之间的引用关系。以上三种形式的完整性在 MySQL 中都有相应约束进行保证。使用主键和唯一键约束可以保证实体完整性;使用外键、合适和数据类型、触发器或者 DEFAULT 关键字也可以保证域完整性... -
No row with the given identifier exists怎么解决
2018-06-12 09:04:12这个是Hibernate错误,原因是 数据库里面有脏数据,即:外键关联的对应主键内容不存在,就像报的这个错误,查询出的User没有了引用,你可以具体自己用一个打印,看看是哪个,下面的问题你自己应该能够解决了... -
无法截断表 ‘tbl_***‘,因为该表正由 FOREIGN KEY 约束引用。
2020-12-11 16:14:24错误背景: 有两张表,一张是主表(tbl_invoice),一张是明细表(tbl_invoice_...(tbl_invoice表中的主键id和tbl_invoice_detail的字段invoice_id是主外键关系) 这时后应该怎么做呢? 查询外键(在主表中查询): - -
在LINQ-TO-SQL中实现“级联删除”的方法
2012-11-23 13:51:00现在假定有两张表tb_Category...现在如果删除一个Category的话会抛出“外键冲突”等异常——究其原因,在于外键如果引用该主键,那么该主键不应该被删除。 怎么解决呢?LINQ-TO-SQL没有提供类似直接解决方案。我们... -
多表之间如何建立关联映射
2018-10-09 15:38:26那么 在数据库中怎么给数据表添加外键呢 1.确定是给哪个表添加外键关联 首先要明白你创建的的多个数据表及其表与表之间的关联关系 举例User表(一方)和Customer表(多方) 建立一对多联系(在“多”方实体中添加... -
为什么数据表中都要添加一个业务无关的ID字段
2013-04-19 20:37:31这个问题当时真的不知道怎么回答,只是说Hibernate框架就是这么要求的。后来翻了上学时候的书《数据库...1.2 目的:保证每一个实体会有惟一的标识,并且确保外键标值可以正确的引用主键标值; 1.3 示例:没有发票可以 -
Hibernate菜鸟学习笔记
2014-08-02 23:40:48关系映射一对一,一对多,多对一,多对多1)怎么写Annotation2)增删改查CRUD怎么写一对一:单向(主键,外键),双向(主键,外键),中间表一对多:单向,双向多对一:单向,双向多对多:单向,双向集合映射,继承关系(不重要),组件映射...
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
用高斯混合模型分类三维数据
-
Spring ConversionService
-
2021周记08:春困的一周
-
混合动力系列轿车出厂检验规范.docx
-
【Mac】mac使用
-
全球编程大赛作品,拍摄月亮 3.98K.rar
-
Xshell连接VMware虚拟机
-
PPT大神之路高清教程
-
MySQL NDB Cluster 负载均衡和高可用集群
-
20210301resume.zip
-
2020年Java面试208题 010-抽象类是否必须有抽象方法
-
sqlmap常规命令教程
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
朱老师鸿蒙系列课程第1期-2鸿蒙系统Harmonyos源码架构分析
-
美团2021笔试题(第十场)-正则序列
-
在 Linux 上构建企业级 DNS 域名解析服务
-
Axure一些常用模板下载(免费模板)
-
使用 Linux 平台充当 Router 路由器
-
基于python的dango框架购物商城毕业设计毕设源代码使用教程