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

MySQL约束:主键、非空、唯一、外键 ️

深入探讨MySQL约束:主键、非空、唯一、外键 ️ 摘要 大家好,我是默语,擅长全栈开发、运维和人工智能技术。...在这篇博客中,我将详细介绍MySQL中各种约束的使用,包括主键约束、非空约束、唯一约束和外键约束。这些约束是保证数据库完整性和数据一致性的关键。...关键词:MySQL约束、主键、非空、唯一、外键、数据库设计。 引言 MySQL约束是数据库设计中至关重要的一部分。通过设置合适的约束,可以有效地防止不合法的数据插入表中,从而保证数据的一致性和完整性。...A:是的,一个表可以有多个外键,每个外键都指向另一个表中的主键或唯一键。 Q:如果删除一个有外键约束的记录会怎样?...NOT NULL 唯一约束 确保列中的所有值都是唯一的 UNIQUE (column_name) 外键约束 维护两个表之间的数据一致性 FOREIGN KEY (column_name) REFERENCES

17110

主键、唯一键与唯一索引的区别

大家好,又见面了,我是全栈君 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。...索引和键的混淆通常是由于数据库使用索引来实施完整性约束。 接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。...如果我们让主键约束或者唯一键约束失效,Oracle自动创建的唯一索引是否会受到影响? SQL> drop table test purge; Table dropped....如果我们先创建唯一索引,再创建主键或者唯一键约束,情况又会怎样呢? SQL> drop table test purge; Table dropped....总结如下: (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除; (2)主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空; (3)

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL数据库——表的约束(非空约束、唯一约束、主键约束、外键约束)

    目录 1 表的约束 约束,是对表中的数据进行限定,保证数据的正确性、有效性和完整性,约束分为以下几类: 主键约束:primary key 非空约束:not null 唯一约束:unique 外键约束:foreign...VARCHAR(20) UNIQUE; 1.3 主键约束:primary key 1)注意: 若某一列添加了该约束,则代表了非空,且唯一; 一张表只能有一个字段为主键; 主键就是表中记录的唯一标识;...外键,就是从表中与主表主键对应的那一列,如:员工表中的dep_id,其中,主表是一方,用来约束别人的表,从表可以是多方,被别人约束的表。 注意:外键可以为NULL,但是不能是不存在的外键值。 ?...外键列                    constraint 外键名称 foreign key (外键列名称) references 主表名称(主表主键名称)         ); -- 创建部门表...CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id) ); -- 外键对应主表的主键 --

    14.6K21

    数据库外键的作用,以及和主键的区别

    最后说一下,建键几个原则: 1、 为关联字段创建外键。 2、 所有的键都必须唯一。 3、避免使用复合键。 4、外键总是关联唯一的键字段。 ...http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 一、主键是能确定一条记录的唯一标识...身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。...二、主键、外键和索引的区别 定义: 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引--该字段没有重复值,但可以有一个空值...作用: 主键--用来保证数据完整性 外键--用来和其他表建立联系用的 索引--是提高查询排序的速度 个数: 主键--主键只能有一个 外键--一个表可以有多个外键 索引--一个表可以有多个唯一索引

    6K21

    数据库 PostgreSQL 常用命令

    PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。...简介 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。...PostgreSQL 的 Slogan 是 “世界上最先进的开源关系型数据库”。...**行:**一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。 主键:主键是唯一的。一个数据表中只能包含一个主键。...你可以使用主键来查询数据。 **外键:**外键用于关联两个表。 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。 **索引:**使用索引可快速访问数据库表中的特定信息。

    2.3K30

    数据库 PostgreSQL 常用命令

    PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。...简介 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。...PostgreSQL 的 Slogan 是 “世界上最先进的开源关系型数据库”。...**行:**一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。 主键:主键是唯一的。一个数据表中只能包含一个主键。...你可以使用主键来查询数据。 **外键:**外键用于关联两个表。 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。 **索引:**使用索引可快速访问数据库表中的特定信息。

    2.2K40

    SQL中什么是主键和外键,它们之间的区别是什么?

    SQL主键和外键:结论主键和外键是数据库设计中的重要概念,因为它们有助于建立表之间的关系并帮助确保数据的完整性。...一个主键可以唯一地识别一个表中的行,而一个外键则是通过引用相关表的主键将两个表联系在一起。这里你应该注意的最重要的区别是,主键不能有NULL值,而外键可以接受NULL值。...什么是主键主键是表中的一个列(或一组列),用于唯一地识别表中的每一行。它不能包含空值,并且在表中的所有行中必须是唯一的。一个表中只允许有一个主键。...数据库中主键和外键的重要区别下表强调了主键和外键之间的所有重要区别Key主键外键Basic它用于唯一地识别表中的数据。它用于维护表之间的关系。Null它不可能是NULL。它可以接受NULL值。...重复的两条或多条记录不能有相同的主键。它可以为一个外键属性携带重复的值。IndexPrimary有聚类索引。默认情况下,它不是聚类索引。Tables可以在临时表上定义主键约束。它不能被定义在临时表上。

    94340

    PostgreSQL 基础与实践

    ,每张表中的主键字段不能为空且不能重复,这主要是指表中的数据都可以被唯一区分。...(30), id_number VARCHAR(18) UNIQUE ); 参照完整性是指数据库不允许引用不存在的实体,数据库的表与其他表之间往往存在一些关联,可以通过外键约束来保障其完整性。...主键在数据表中的唯一身份记录,用以下命令创建与修改: --- 添加主键 CREATE TABLE person ( id BIGSERIAL NOT NULL PRIMARY KEY );...--- 修改主键 ALTER TABLE person ADD PRIMARY KEY(id); 其中主键通常会使用 SERIAL/BIGSERIAL 递增 INT 值,也可以使用 UUID 作为主键。...CREATE TABLE person ( id UUID NOT NULL PRIMARY KEY ); FOREIGN KEY 外键 外键是一种特殊的主键,它是另一个表的主键,用以下命令创建与修改

    1.3K20

    经验拾忆(纯手工)=> Python-

    : print(db.get_primary_keys('owner')) 列出所有索引字段的详细信息: print(db.get_indexes('owner')) 列出所有外键的字段: print(...外键字段(ForeignKeyField) 普通外键 class BaseModel(Model): # 基类 name = CharField(max_length=10) class...这就是级联删除 on_update=Cascade, # 级联更新,原理同 on_delete ) 层级外键(通常用于层级分类,自关联查询): class Category...) 通过定义表属性Meta: 联合唯一索引 class Meta: indexes = ( (('字段1', '字段2'), True), # 字段1与字段2整体作为索引...,True 代表唯一索引 (('字段1', '字段2'), False), # 字段1与字段2整体作为索引,False 代表普通索引 ) 需要注意的是,上面语法,三层元组嵌套

    1.5K10

    python-Python与PostgreSQL数据库-PostgreSQL数据库的基本知识(一)

    PostgreSQL数据库基本知识数据库:数据库是一个结构化的数据集合,它由一个或多个表组成,并且包含一些关系。表:表是一种结构化的数据集合,它由一些行和列组成。...列:列是表中的一个数据字段,它包含一种数据类型和一个名称。行:行是表中的一个数据记录,它由一些列组成。主键:主键是一个唯一的标识符,它用来标识表中的每个行。外键:外键是一个引用另一个表中的主键的列。...以下是一个使用Python连接PostgreSQL数据库的示例代码:import psycopg2# 连接到PostgreSQL数据库conn = psycopg2.connect( host="...Python操作PostgreSQL数据库使用Python操作PostgreSQL数据库需要使用psycopg2库提供的一些方法。...以下是一些常用的Python操作PostgreSQL数据库的示例代码:创建一个表import psycopg2# 连接到PostgreSQL数据库conn = psycopg2.connect(

    1.3K20

    PostgreSQL 教程

    如果你是 … | 寻求快速学习 PostgreSQL。 | 使用 PostgreSQL 作为后端数据库管理系统开发应用程序。...左连接 从一个表中选择行,这些行在其他表中可能有也可能没有对应的行。 自连接 通过将表与自身进行比较来将表与其自身连接。 完全外连接 使用完全连接查找一个表中在另一个表中没有匹配行的行。...了解 PostgreSQL 约束 主题 描述 主键 说明在创建表或向现有表添加主键时如何定义主键。 外键 展示如何在创建新表时定义外键约束或为现有表添加外键约束。...唯一约束 确保一列或一组列中的值在整个表中是唯一的。 非空约束 确保列中的值不是NULL。 第 14 节....hstore 向您介绍数据类型,它是存储在 PostgreSQL 中单个值中的一组键/值对。 JSON 说明如何使用 JSON 数据类型,并向您展示如何使用一些最重要的 JSON 运算符和函数。

    59010

    SqlAlchemy 2.0 中文文档(三十九)

    通常,在反映视图时,至少希望有一个主键约束,如果可能的话,也有外键。视图反射不会推断这些约束。...给定一个字符串table_name和一个可选的字符串模式,返回外键信息作为ReflectedForeignKeyConstraint的列表。 参数: table_name – 表的字符串名称。...,其中包含剩余的外键约束名称,这些名称需要根据表之间的依赖关系在事后进行单独的创建步骤。 参数: schema – 要查询的模式名称,如果不是默认模式。...通常,在反射视图时,至少希望有一个主键约束,如果可能的话还有外键。视图反射不会推断这些约束。...,其中包含剩余的外键约束名,这些名字需要在事后单独进行 CREATE 步骤,基于表之间的依赖关系。 参数: schema - 要查询的模式名称,如果不是默认模式。

    42610

    PawSQL独家秘笈:表连接消除优化让SQL性能翻倍

    .* FROM orders o INNER JOIN customer c ON c.c_custkey = o.o_custkey 如果customer表的c_custkey是主键,那么这个查询可以被优化为...内连接消除 适用条件: 存在主外键等值连接 主表的主键是查询中唯一被引用的主表列 优化方式: 移除主表及连接条件 将主表主键的引用替换为外表外键 必要时添加外键非空条件 2....外连接消除 适用条件: 左外连接或右外连接 连接条件包含主外键等值连接 内表主键是查询中唯一被引用的内表列 优化方式: 移除内表及所有连接条件 将内表主键的引用替换为外表外键 ️ 主流数据库的现实挑战...尽管连接消除技术如此高效,但主流数据库如MySQL和PostgreSQL却还未拥抱这一优化。...它们的执行计划依旧在进行完整的连接操作,未展现连接消除的魔力。

    12210

    探索 PostgreSQL 基础语法:开启数据库编程之旅

    PostgreSQL 作为一款功能强大、开源且高度可扩展的关系型数据库管理系统,被广泛应用于各种领域。...VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE);在这个示例中,id 列是一个自增的主键,确保每条记录都有唯一的标识符。...除了前面提到的主键约束(PRIMARY KEY)和唯一约束(UNIQUE)外,还有其他常见的约束类型。非空约束非空约束(NOT NULL)确保列中的值不能为空。...外键约束外键约束(FOREIGN KEY)用于建立表之间的关联关系。例如,假设有一个 orders 表,其中包含 user_id 列,用于关联 users 表中的 id 列。...INT REFERENCES users(id));通过外键约束,可以保证 orders 表中的 user_id 列的值必须存在于 users 表的 id 列中,从而维护了数据的关联性和一致性。

    11800

    从MySQL主键为何单调递增说起

    联合主键体现在多个表上,复合主键体现在一个表中的多个字段。 复合主键 主键通常定义在表的一列上,但这并不是必需的,也可使用多个列作为主键。...表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键 将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样...一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。 候选键 是最小超键,即没有冗余元素的超键。...外键 在一个表中存在的另一个表的主键称此表的外键 主键的选择 数据库中的每一条记录都需要有一个唯一的标识,依据数据库第二范式,数据库中每一个表中都需要有一个唯一的主键,其他数据元素和主键一一对应。...而对于用户表来说,我们需要考虑的是作为主键的业务字段是否能够唯一标识一个人,一个人可以有多个email和手机号,一旦出现变更email或者手机号的情况,就需要变更所有引用的外键信息,所以使用email或者手机作为主键是不合适的

    2.1K30

    初识数据库

    关系模型 将数据看做一个二维表格,数据可以通过行号+列号唯一确定,其数据结构类似 Excel 表; ?...DATETIME 日期和时间类型 存储日期+时间,例如,2018-06-22 12:20:59 ---- 当前主流关系数据库类型 商用 : Oracle、SQL Server、DB2..… 开源 : MySQL、PostgreSQL...安装[2] ---- 关系模型 基本术语 记录(Record):表的一行,它是一个逻辑意义上的数据; 字段(Column):表的一列,一个表的每行记录均拥有相同的若干字段; 主键 :在一个表中,能通过某一字段唯一区分出不同的记录...,则该字段称为主键,被选做主键的字段一旦插入记录,则最好不要再修改,否则将造成一系列的影响,其基本原则为:不使用任何业务相关字段作为主键,而应该使用BIGINT自增或GUID类型,也不允许主键为NULL...; 联合主键 :运行一列中有重复,但是不能所有主键列均重复; 外键 :并非通过字段来实现,而是通过自定义外键约束来实现; 索引 :关系数据库中对某一列或多个列的值进行预排序的数据结构,优点是提高了查询效率

    81820

    关于如何更好管理好数据库的一点思考

    第三范式(3NF) 要求:在满足2NF的基础上,所有非主属性必须直接依赖于主键,消除传递依赖。 分析:在课程表中,“教师办公室”依赖于“教师”,不是直接依赖于主键“课程ID”。...) 外键 课程ID(CourseID) 外键 成绩(Grade) 关系 选课(Enrollment) 关系类型:学生和课程之间的多对多关系。...主键:教师ID唯一标识每个教师。 选课关系(Enrollment): 外键:学生ID、课程ID。 属性:成绩。 多对多关系:一个学生可以选多门课程,一门课程可以有多个学生选修。...确定主键和外键,为后续的数据库表设计打下基础。 通过ER图的使用,可以将复杂的数据库设计过程简化为多个直观的组件和关系,确保设计的数据库结构既高效又符合业务需求。...数据完整性(Data Integrity) 目的:确保数据库中的数据准确、一致、可靠。 实际应用: 实体完整性:每个表都有唯一的主键。 参照完整性:使用外键维护表与表之间的关系,确保引用的有效性。

    15010

    MySQL的主键详解

    除MySQL强制实施的规则外,还应该坚持的最佳实践: 不更新主键列中的值 不重用主键列的值 不在主键列中使用可能会更改的值 例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其 名字时...联合主键体现在多个表上,复合主键体现在一个表中的多个字段。 复合主键 主键通常定义在表的一列上,但这并不是必需的,也可使用多个列作为主键。...表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键 将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样...一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。 候选键 是最小超键,即没有冗余元素的超键。...外键 在一个表中存在的另一个表的主键称此表的外键 主键的选择 代理主键(推荐使用) 与业务无关的,无意义的数字序列。

    5K20
    领券