首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我们可以使用主键的约束名称作为外键引用吗?

在关系型数据库中,主键是用来唯一标识表中每一行数据的字段或字段组合。外键是用来建立表与表之间关联关系的字段,它引用了其他表中的主键。

根据数据库设计的原则,外键应该引用其他表的主键,而不是主键的约束名称。主键的约束名称是用来标识主键约束的名称,它并不具备唯一性,因此不能作为外键引用。

使用主键的约束名称作为外键引用会导致以下问题:

  1. 数据完整性问题:外键引用的是其他表的主键,这样可以确保数据的完整性,避免引用了不存在的数据。如果使用主键的约束名称作为外键引用,就无法保证引用的数据是有效的。
  2. 数据一致性问题:如果使用主键的约束名称作为外键引用,当主键约束名称发生变化时,所有引用该主键的外键也需要相应地修改,这会导致数据一致性的问题。
  3. 可读性和可维护性问题:使用主键的约束名称作为外键引用会使代码变得难以理解和维护,因为无法直观地知道外键引用的是哪个表的主键。

因此,为了确保数据的完整性、一致性以及代码的可读性和可维护性,应该使用其他表的主键作为外键引用,而不是主键的约束名称。

腾讯云提供了多个与数据库相关的产品,如云数据库 TencentDB、分布式数据库 TDSQL、数据库备份服务 TencentDB for Redis 等。您可以根据具体需求选择适合的产品进行数据库的设计和管理。详细信息请参考腾讯云数据库产品官方文档:腾讯云数据库产品

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《深入浅出SQL》问答录(六)

A:为NULL,表示在父表中没有相符主键。但我们可以确认包含有意义、已经存储在父表中值,请通过约束实现。...---- Q:不能单纯使用另一张表,称之为,而不加上约束? A:其实可以,但创建成约束后,就只能插入已经存在于父表中值,有助于加强两张表间连接。...A:约束能确保引用完整性(换句话说,如果表中某行有约束能确保该行通过与另一张表中某一行一一对应)。...如果我们试着删除主键表中行或者是改变主键值,而这个主键是其他表约束时,你就会收到错误警告。 ---- Q:所以上面说那种,我就不能删除了是?...插入值必须已经存在与父表来源中,这是引用完整性。 创建作为约束提供了明确优势,如果违反了规则,约束会阻止我们破坏表。 不一定要是父表主键,但是要具有唯一性。

1.1K20

《深入浅出SQL》问答录

有办法确定已经连接到父了吗? A:为NULL,表示在父表中没有相符主键。但我们可以确认包含有意义、已经存储在父表中值,请通过约束实现。...A:约束能确保引用完整性(换句话说,如果表中某行有约束能确保该行通过与另一张表中某一行一一对应)。...如果我们试着删除主键表中行或者是改变主键值,而这个主键是其他表约束时,你就会收到错误警告。 所以上面说那种,我就不能删除了是? A:还是可以,先移除外行即可。...约束 创建一张表并加上可作为列虽然很简单,但除非你利用CREATE或ALTER语句来指定,否则都不算是真的。创建在结构内被称为约束。...插入值必须已经存在与父表来源中,这是引用完整性。 创建作为约束提供了明确优势,如果违反了规则,约束会阻止我们破坏表。 不一定要是父表主键,但是要具有唯一性。 ?

2.9K50

MySQL 约束

约束 约束用于建立表与表之间关系,确保引用另一个表中值时完整性。 约束经常和主键约束一起使用,用来确保数据完整性,即保证该字段值必须来自于主表关联列值。...在从表添加约束,用于引用主表中某列值。 例如,在员工信息表中,员工所属部门是一个,因为该字段是部门表主键。...你可以主键约束指定一个名称,以便在将来引用它。symbol 是主键约束名称可以根据你喜好为其指定,如果不指定,则系统会为主键自动生成一个名称。...), UNIQUE (name, email) ); 创建约束 建表时使用 FOREIGN KEY 引用主表创建。...CONSTRAINT_NAME:这是约束名称。对于主键约束、唯一约束约束和检查约束,它将是一个用户定义名称。 TABLE_SCHEMA:这是包含受约束数据库名称

16410

【MySQL】04_约束

+ 非空约束组合) PRIMARY 约束 限定某个表某个字段引用完整性。...,然后才可以删除主表数据 在“从表”中指定约束,并且一个表可以建立多个约束 从表列与主表被参照列名字可以不相同,但是数据类型必须一样,逻辑意义一致。...那么建和不建约束不影响查询语句执行 阿里开发规范 【 强制 】不得使用与级联,一切概念必须在应用层解决。...因此,我们往往在建表时 not null default '' 或 default 0** (3) 带AUTO_INCREMENT约束字段值是从1开始?...添加主键约束时,往往需要设置字段自动增加属性。 (4) 并不是每个表都可以任意选择存储引擎? 约束(FOREIGN KEY)不能跨引擎使用

2.4K20

BI-SQL丨Constraints

Constraints数据仓库中经常使用有以下几种约束: NOT NULL(不为空) UNIQUE(唯一) PRIMARY KEY(主键) FOREIGN KEY() CHECK(检查) DEFAULT...但是我们需要一个额外主键来标记当前表中每一行记录。以方便其他表引用此表中数据。注:订单ID也可以作为主键,但是有可能信息过长,而且有可能产生信息被利用情况。...//多个列定义约束 ...... ) C.FOREIGN KEY 一个表中,通常可以用来连接另外一张表中主键。...同时,存在,可以防止意外删除。这对于数据仓库来说,很重要。...FOREIGN KEY () REFERENCES 表名称(主键)//多个列定义约束 ...... ) D.CHECK CHECK通常可以用来约束限制列值范围。

73720

oracle基础|数据库如何设计|数据库六种范式|数据库主键|数据库约束

目录 一、数据库设计 二、数据库六种范式 第一范式: 第二范式: 第三范式: 三、主键 主键: : 四、完整性约束 五、建表 六、oracle数据库中多种数据结构 ---- 一、数据库设计...,比如说学号,它既表示学生学号又作为表中主键,因为这个列满足非空唯一条件 4.也可以找一个没有意义列做主键,就是用来唯一标识一行记录 5.我们可以让多个列联合在一起做表中主键,那么它就是联合主键...,要求这几个列值联合在一起是非空唯一 : 1.表中某一个列声明为列,一般这个值都会引用于另外一张表主键值(有唯一约束列就可以,不一定非要引用主键列) 2.另外一张表主键列中出现过值都可以在外列中使用...3.列值也可以为空,提前是这个列在表中不做主键,因为我们可以把表中列当做主键使用(只有满足非空唯一要求就可以) 4.如果把B表中联合主键引用到A表中做,因为是俩个列在B...表中做联合主键,那么A表引用过来时候也要把俩个列值都引用过来,那么它们在A表中就会作为一个联合出现 四、完整性约束 实体完整性: 引用完整性 列级完整性 用户自定义 五、建表 1.映射实体---

65240

linux 之mysql——约束(constraint)详解

即使表中两行记录相关数据相同,但由于主键值不同,所以也认为是两行不同记录 5、按主键约束字段数量分类 无论是单一主键还是复合主键,一张表主键约束只能有一个(约束只能有一个,但可以作用到好几个字段)...A为基本表,B为信息表 1、涉及到术语 约束 字段 键值 2、约束字段、键值之间关系 某个字段添加约束之后,该字段称为字段,字段中每个数据都是键值 3、按约束字段数量分类...单一:给一个字段添加约束 复合:给多个字段联合添加一个约束 4、一张表可以有多个字段(与主键不同)  建立两个表,学生表,和班级表 学生表(添加单一) sno(pk)...字段中数据必须来自于班级表中cno字段中数据,有必要给学生表中classno字段添加约束  注意要点: 键值可以为null 字段去引用一张表某个字段时候,被引用字段必须具有unique...:如果父表中记录被删除,则子表中对应记录自动被删除 父表——被引用表 子表——引用父表中作为表 on delete set null  表关联列值设置为null  alter table

2.3K20

MySQL学习之路:数据完整性-约束

PRIMARY KEY 又称为主键约束,定义表中构成主键一列或多列。 主键用于唯一标识表中每条记录,作为主键字段值不能为NULL且必须唯一,可以是单一字段,也可以是多个字段组合。...序号 字段 数据类型 主键 允许空 说明 1 cid int 是 否 类别id 2 cname varchar(30) 否 类别名称 序号 字段 数据类型 主键 允许空 说明 1 gid...decimal(20,2) 商品价格 使用SQL语句添加约束 CONSTRAINT 键名 FOREIGN KEY(字段名) REFERENCES 主表名(主键字段名) mysql>...约束实现了表间引用完整性,当主表中被引用值发生变化时,为了保证表间数据一致性,从表中与该值相关信息也应该相应更新,这就是约束级联更新和删除。...删除约束 使用DROP TABLE语句删除表时,表中所有的约束也随之被删除。 使用ALTER TABLE可以删除指定约束。 ALTER TABLE 表名 DROP 约束类型 [约束名];

18120

你真的会玩SQL?三范式、数据完整性

你真的会玩SQL?系列目录 你真的会玩SQL?之逻辑查询处理阶段 你真的会玩SQL?和平大使 内连接、连接 你真的会玩SQL?三范式、数据完整性 你真的会玩SQL?...❑范式化允许修改少量数据(即单记录)。换言之,一个表具体字段记录更新时,会影响其他引用表。...如上图中3范式,若就想把楼栋一起查询出来,那从设计上可以分开,另用一个视图将楼栋名称一起查询出来即可。 数据完整性 数据库中数据是从外界输入,而数据输入由于种种原因,会发生输入无效或错误信息。...实体完整性:保证每一行都能被由称为主键属性来标识 域完整性:保证在效范围内值才能存储到相应列中 引用完整性:确保外值必须与相关主键相匹配,禁止在从表中插入包含主表中不存在关键字数据行; 用户定义完整性...:由用户指定一组规则 实现数据完整性主要方式是约束 主键约束 primary key 确保字段值不重复不为NULL 唯一约束 unique 确保字段值不重复 约束 foreign key 确保字段值必须来自于指定表

83570

数据库_mysql多表操作

l 一对一关系:(了解) n 在实际开发中应用不多.因为一对一可以创建成一张表. n 两种建表原则: u 唯一:主表主键和从表(唯一),形成主外关系,唯一unique。...1.2 约束 现在我们有两张表“分类表”和“商品表”,为了表明商品属于哪个分类,通常情况下,我们将在商品表上添加一列,用于存放分类cid信息,此列称为: ? ?...我们通过主表主键和从表来描述主外关系,呈现就是一对多关系。 特点: u 从表值是对主表主键引用。 u 从表类型,必须与主表主键类型一致。...l 声明约束 语法:alter table 从表 add [constraint] [名称] foreign key (从表字段名) references 主表 (主表主键); [名称...]用于删除外约束,一般建议“_fk”结尾 altertable 从表 drop foreignkey 名称 l 使用目的: n 保证数据完整性 1.3 一对多操作 1.3.1 分析

2.2K80

在PowerDesigner中设计物理模型1——表和主外

Name是模型上显示名称,Code是生成实际表名,后面的3个复选框P代办主键、F代表,M代表不能为空。...另外需要注意是,在建立主键时,系统会在主键上建立索引,索引分为聚集索引和非聚集索引,在“属性”窗口General选项卡中可以设置该主键上建立索引是聚集索引还是非聚集索引,如图所示: 如果是由概念模型或者逻辑模型生成物理模型...,那么是通过Relationship生成,也可以通过工具栏中Reference来实现两表之间关系。...”按钮,然后在设计面板中,课程表上按下鼠标左键,并拖拽到教师表中放开鼠标,这时如果课程表中没有RoomID列,系统会自动创建RoomID列并创建该列上引用,如果已经存在RoomID列,则只添加引用...切换到鼠标指针模式,双击箭头,系统将弹出引用属性窗口,在属性窗口中可以设置该引用Name、Code、关联列、约束名、更新策略和删除策略等。

1.9K10

多表间关系-一对多-多对多-一对一-约束

我们管1一方,叫主表或1表. 我们管多个一方,叫从表或多表. 通常要在多一方添加一个字段,用于存放主表主键值,我们管这个字段叫字段....字段值必须为主表主键值,若为其他值,则没有意义. image-20200529101003797 用于限制字段取值必须为主表主键约束叫做-约束. 2....约束 5.1 什么是约束 一张表中某个字段引用另一个表主键 主表:约束别人 副表/从表:使用别人数据,被别人约束 5.2 创建 新建表时增加:[CONSTRAINT] [约束名称...] FOREIGN KEY(字段名) REFERENCES 主表名(主键字段名) 关键字解释:CONSTRAINT -- 约束关键字 FOREIGN KEY(字段名) –- 某个字段作为 REFERENCES...-- 主表名(主键字段名) 表示参照主表中某个字段 已有表增加:ALTER TABLE 从表 ADD [CONSTRAINT] [约束名称] FOREIGN KEY (字段名) REFERENCES

5.6K20

SQL命令 CREATE TABLE(五)

引用另一个表主键字段。...字段(CustomerNum)和引用字段(CustID)可以有不同名称(或相同名称),但必须具有相同数据类型和字段约束。...可以是单个字段或多个字段。 NO ACTION是切片表支持唯一引用操作。 隐式 最好显式定义所有。如果定义了显式, IRIS会报告此约束,而不定义隐式约束。...但是,可以将隐式投影到ODBC/JDBC和管理门户。所有字段引用作为投影到ODBC/JDBC,如下所示: 这些隐式被报告为无操作UPDATE和DELETE引用操作。...SHARD KEY(Fieldname):可以使用此语法指定RowID以外分片可以指定一个字段名称或逗号分隔字段名称列表作为分片。分片字段数据类型必须是数字或字符串数据类型。

1.7K50

day05_MySQL学习笔记_02

--------------------------------------------   3、引用完整性(参照完整性)     要有必须先有主键关联/引用/参照主键主键数据类型必须一致...) FOREIGN KEY(foreign key:) REFERENCES(references:引用/参照/关联)       第二种添加约束方式:在表格创建时没有添加约束,之后通过修改表格添加约束...设计从表可以有两种方案:         方式1:在t_card表中添加列(相对t_user表),并且给添加唯一约束;即:字段 字段类型 unique,         方式2:给t_card表主键添加约束...) FOREIGN KEY(foreign key:) REFERENCES(references:引用/参照/关联)       第二种添加约束方式:在表格创建时没有添加约束,之后通过修改表格添加约束...还可以为表指定别名,然后在引用列时使用别名即可。

2.1K20

mysql学习笔记(四)约束与索引

article/d5a880eba77c3513f147ccdf.html 三范式 1.列不能拆分 2.唯一标识··3.关系引用主键 具体体现: 将数据放到表中,表放在库中 一个数据库中可以有多个表,每个表都有一个名字...KEY约束约束表之间关系 一、主键约束(primary key constraint)  主键创建时默认会自动生成约束,也可通过显示声明。 ...一个表可以有很多约束 约束需要一个表两个字段或者两个表两个字段之间建立约束 约束一定是在从表、子表中建立。...no action方式:不作为,同4 restrict方式:如果主表被依赖字段值被从表引用了,那么主表对该字段修改和删除就被完全限制了,主表没有主动权,必须先处理从表值。...七、非空约束(not null) 一个表可以有很多非空约束 非空约束只能针对某一个字段来说 非空约束意味着该字段不能存入null alter table 数据库名.表名称 modify 字段名 数据类型

1.9K00

第13章_约束

PRIMARY KEY 主键 (非空且唯一) 约束 FOREIGN KEY 约束 CHECK 检查约束 DEFAULT 默认值约束 注意: MySQL 不支持 check 约束,但可以使用 check...# 6.4 特点 (1)从表列,必须引用 / 参考主表主键或唯一约束列 ​ 为什么?...# 6.10 阿里开发规范 【 强制 】不得使用与级联,一切概念必须在应用层解决。 说明:(概念解释)学生表中 student_id 是主键,那么成绩表中 student_id 则为。...因此,我们往往在建表时 not null default ‘’ 或 default 0 面试 3、带 AUTO_INCREMENT 约束字段值是从 1 开始?...添加主键约束时,往往需要设置字段自动增加属性。 面试 4、并不是每个表都可以任意选择存储引擎? 约束(FOREIGN KEY)不能跨引擎使用

30630

MySQL基础之常见约束和标识列

至多有1个 | √,但不推荐 | | 唯一 | √ | √ | 可以有多个 | √,但不推荐 | : 1、要求在从表设置关系...2、从表类型和主表关联列类型要求一致或兼容,名称无要求 3、主表关联列必须是一个key(一般是主键或唯一) 4、插入数据时,先插入主表,再插入从表 删除数据时,先删除从表,再删除主表...(20) ); #查看stuinfo中所有索引,包括主键、唯一 SHOW INDEX FROM stuinfo; 2.添加表级约束 语法:在各个字段最下面 【constraint 约束名】...(字段名) 【引用】; DROP TABLE IF EXISTS stuinfo; CREATE TABLE stuinfo( id INT, stuname VARCHAR(20), gender...stuinfo; 标识列 又称为自增长列 含义:可以不用手动插入值,系统提供默认序列值 特点: 1、标识列必须和主键搭配

60710

SQLServer 学习笔记之超详细基础SQL语句 Part 1

语句中引用文件名称), fileName = ’数据库文件物理文件名’(含有具体位置,即具体路径(即存储位置)), size = 文件初始大小, maxsize = 文件可以增长到最大大小...列名):选择要设置主键列名,pk是主键名称,以下同理 8.2创建约束 格式: ALTER TABLE表名 ADD CONSTRAINT fk FOREIGN KEY(列名) REFERENCES...[不可撤销] TRUNCATE TABLE table1 --给表table1添加主键约束,选择列为id,把表table2中id列作为table1约束 CREATE TABLE table2...表名 ADD CONSTRAINT pk PRIMARY KEY CLUSTERED(列名) 以上CLUSTERED(列名):选择要设置主键列名,pk是主键名称,以下同理 8.2创建约束...[不可撤销] TRUNCATE TABLE table1 --给表table1添加主键约束,选择列为id,把表table2中id列作为table1约束 CREATE TABLE table2

62520

mysql系列一

主键约束(唯一标识) ****非空*** ****唯一*** ****被引用****(学习时) * 当表某一列被指定为主键后,该列就不能为空,不能有重复值出现。...约束 * 必须是另一表主键值(引用主键!) * 可以重复 * 可以为空 * 一张表中可以有多个!...但是我们必须要去对它进行约束,不然可能会出现员工所属部门编号是不存在。这种约束就是约束我们需要给emp.deptno添加约束约束值必须在dept.deptno中存在。...语法:CONSTRAINT 约束名称 FOREIGN KEY(列名) REFERENCES 关联表(关联表主键) 创建表时指定约束 create talbe emp ( empno...*****从表主键即是! 8. 数据库多对多关系 在表中建立多对多关系需要使用中间表,即需要三张表,在中间表中使用两个,分别引用其他两个表主键

94720

SQL笔记(1)——MySQL创建数据库

:新约束名称; FOREIGN KEY:指定该约束为一个约束; (teacher_id):名称,即参考 teacher 表中哪一列。...括号内内容表示列名; REFERENCES teacher(id):列所参考表和列。REFERENCES 关键字指定被参考表名称,括号内内容则表示该表某一列名称作为参考值。...可以使用 ADD CONSTRAINT 添加多种类型约束,例如主键约束、唯一性约束约束等等。...在实际应用中,我们通常将主键作为一种基础元素,通过主键约束方式来保证主键所包含列数据完整性和唯一性,从而提高数据库稳定性和安全性。...约束可以确保表中指向其他表字段只包含该表中存在值。约束可以防止删除数据时出现意外情况(例如删除了被其他表所引用数据)。

3K20
领券