首页
学习
活动
专区
圈层
工具
发布

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

目录 1 表的约束 约束,是对表中的数据进行限定,保证数据的正确性、有效性和完整性,约束分为以下几类: 主键约束:primary key 非空约束:not null 唯一约束:unique 外键约束:foreign...以上仍然存在一个问题,当在员工表中输入不存的部门时,数据依然可以添加,不符合实际,因此,这里就可以通过使用外键约束来解决。 【概念】什么是外键约束?...外键,就是从表中与主表主键对应的那一列,如:员工表中的dep_id,其中,主表是一方,用来约束别人的表,从表可以是多方,被别人约束的表。 注意:外键可以为NULL,但是不能是不存在的外键值。 ?...department(id) ); -- 外键对应主表的主键 -- 添加2个部门 INSERT INTO department VALUES(NULL, '研发部','广州'); INSERT...id,同时希望自动改动员工表中的id,这时就需要进行级联操作,需要在添加外键的时候设置级联: 添加级联操作:ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY

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

    node 数据库ORM框架TypeORM入门

    可以直接从数据库中得到包含数据的实体对象,并且可以通过实体进行数据库表的insert/update/remove。...现在运行app,会新创建一个table,这个table有一个连接photo的外键: +-------------+--------------+----------------------------+...按上面说的,@JoinColumn只能在关系的一边使用来使这边做为关系的拥有者,关系拥有者在数据库里的表现就是拥有一个外键列。 取出关系对象的数据 现在来用一个查询来取出photo以及它的元信息。...译者注:拥有外键者即关系拥有者 也就是ManyToOne的那个字段存的是另一个对象的id。...,所以不是增加而是修改photo表 – 添加一个新外键列author: +-------------+--------------+----------------------------+ |

    9.7K31

    【译】Nodejs最好的ORM - TypeORM

    可以直接从数据库中得到包含数据的实体对象,并且可以通过实体进行数据库表的insert/update/remove。...现在运行app,会新创建一个table,这个table有一个连接photo的外键: +-------------+--------------+----------------------------+...按上面说的,@JoinColumn只能在关系的一边使用来使这边做为关系的拥有者,关系拥有者在数据库里的表现就是拥有一个外键列。 取出关系对象的数据 现在来用一个查询来取出photo以及它的元信息。...译者注:拥有外键者即关系拥有者 也就是ManyToOne的那个字段存的是另一个对象的id。...,所以不是增加而是修改photo表 - 添加一个新外键列author: +-------------+--------------+----------------------------+ |

    20.4K133

    在 Nest.js 中编写 SQL 的另一种方式(MyBatisMapper)

    在 Nest.js 开发中我们通常会选择 TypeORM 框架操作数据库,这对前端 SQL 弱的来说确实是有很大的帮助。但对于一些复杂的查询显得有点麻烦,甚至比直接写 SQL 更复杂。...下面举了几个例子对比几种写法的区别和优缺点。以及如何在 Nest.js 使用 MyBatis 的语法。 需求 如现在有以下表结构,学生表、学科表、分数表。来表示学生的学科考了多少分这个需求。...(3, 1, 3, 68); INSERT INTO `score` VALUES (4, 2, 1, 92); INSERT INTO `score` VALUES (5, 2, 2, 81); INSERT...{ "id": 2, "score": 97, "studentName": "小红", "subjectName": "数学" } // ... ] 实现 QueryBuilder...{ EntityManager } from "typeorm"; import { MybatisService } from "..

    76910

    MySQL-约束

    外键约束 概念 使用外键来建立两张表之间的连接,从而保证数据的一致性和完整型性。...举例 员工表 其中的字段 deft_id 就是外键 部门表 deft_id 建立了员工表与部门表之间的联系,并且将部门表称作父表,员工表称作子表(具有外键的表)。...,刚刚我们以department_id作为外键去建立了两个表之间的关联,字段名前出现蓝色小钥匙,代表外键的意思。...,系统会自动检查是否有关联的外键,如果有,就会检查并且同时修改外键所在的表中的数据: 上面是修改前的员工表和部门表,然后我现在将部门表中的 人力资源部的对应编号改成6: 那么此时在 UPDATE CASCADE...的约束下,员工表中外键相关联的数据也应该发生变化: SET NULL 使用SET NULL命令,此时在该约束下,修改了父表之后就会自动检查外键所在的表,与之关联的字段值就会设置为null 将部门表中的人力资源部删除

    18310

    基于 Nest.js+TypeORM 实战,项目已开源,推荐!

    数据表关系 前面文章中已经说了TypeORM建表时,是通过@Entity()装饰的class 映射为数据表, 所以实体中的关系也就是表关系。...从上面代码可以看出, 是通过@OneToOne装饰器来修饰的, 在装饰器中需要指定对方entity的类型,以及指定对方entity的外键。...@JoinColumn 必须在且只在关系的一侧的外键上, 你设置@JoinColumn的哪一方,哪一方的表将包含一个relation id和目标实体表的外键。记住,不能同时在二者entity中。...category.posts) @JoinColumn({name: "category_id"}) category: CategoryEntity; } @ JoinColumn不仅定义了关系的哪一侧包含带有外键的连接列...TypeORM在处理“一对多”的关系时, 将一的主键作为多的外键,即@ManyToOne装饰的属性;这样建表时有最少的数据表操作代价,避免数据冗余,提高效率, 上面的实体关系会生成以下表: |

    12.4K41

    SQL命令 INSERT(三)

    插入不能包含值违反外键引用完整性的字段,除非指定了%NOCHECK关键字,或者外键是用NOCHECK关键字定义的。...否则,尝试违反外键引用完整性的插入将导致SQLCODE -121错误,并带有%msg,如下所示:<Table 'Sample.MyTable', Foreign Key Constraint 'MYTABLEFKey2...参照完整性 如果没有指定%NOCHECK关键字, IRIS将使用系统范围的配置设置来确定是否执行外键引用完整性检查; 默认值是执行外键引用完整性检查。...此设置不适用于用NOCHECK关键字定义的外键。 在INSERT操作期间,对于每个外键引用,都会在引用表中相应的行上获得一个共享锁。 在执行引用完整性检查和插入该行时,此行被锁定。...这确保了引用的行不会在引用完整性检查和插入操作完成之间发生更改。 但是,如果指定了%NOLOCK关键字,则不会对指定的表或引用表中相应的外键行执行锁操作。

    3.4K10

    MySQL数据库表的约束

    表的约束:表中一定要有各种约束,通过约束让我们未来插入数据库表中的数据是否合法的预期。本质通过技术手段倒逼程序员插入正确的数据。而站在MySQL视角,插入进来是数据一定是合法的。...unique) 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键,剩下需要唯一性约束的字段就可以使用唯一键。...into stu values(20250307,null,'王五'); Query OK, 1 row affected (0.00 sec) mysql> 8.外键 外键约束的是表和表之间的关系...比如两个表:一个称为主表,一个称为从表。外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。...语法:在从表的列项中加 语法:foreign key (字段名) references 主表(列) 注意:因为外键是在从表上建立,需要主表的信息,所以需要先建主表。

    18610

    YashanDB数据完整性

    如果表中已包含数据,不能再添加一个具有NOT NULL约束的列,除非对应列还带有DEFAULT值定义。# 唯一约束唯一约束规定了在指定列或列集中的每个值都是唯一的。...通常,外键约束要求约束列或列集中的每个值都必须与另一个表的指定列中的值相匹配,例如教师所带的班级必须是班级信息表中存在(教师信息表到班级信息表的外键约束)。...术语定义外键/复合外键约束定义中包含的列称为外键,一个外键由多个列组成时称为复合外键。外键会引用另一个表的主键或唯一键,复合外键则需引用相同数量和数据类型列的复合主键或复合唯一键。...依赖表又称“子表”,外键约束所在的表。被引用表又称“父表”,被子表的外键引用的表。该表中的被引用值决定了在子表中特定的插入或更新是否可被允许。...# 父表的修改与外键的关系删除或更新父表数据可能会破坏外键约束。

    1.1K00

    SQL基础--> 约束(CONSTRAINT)

    KEY 主键约束P 唯一的标识出表的每一行,且不允许空值值,一个表只能有一个主键约束 FOREIGN KEY 外键约束R 一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列...SET NULL: 子表中相应的列置空 如果子表在建外键时,该列的数据并不在父表,则无法创建该约束。...insert语句的影响: 插入数据的外键字段值必须在主表中存在,只有从表才有可能违反约束,主表不会。...外键约束对delete语句的影响: 删除主表数据时,如果从表有对该数据的引用,要先将从表中的数据处理好。主表才有可能违反约束。...外键约束对update语句的影响: 主从表都有可能违反外键约束,操作一个表必须将另一个表的数据处理好。 外键约束对DDL语句的影响: 删除主表时,才有可能违约约束。

    2.3K20

    POSTGRESQL 性能优化 数据的DML 需要进行优化吗? 当然

    实际上POSTGRESQL 的DML 只分为两类 1 INSERT 2 SELECT INSERT = UPDATE OR DELETE 数据插入和找到需要进行修改的数据,并在次将新的数据进行插入的操作...2 数据表中的FACTOR的状态和设置 3 UPDATE 的频率问题 4 Autovacuum 频率调整的问题 5 定期需要进行pg_repack 的工作 6 外键与约束的影响 我们从第一个问题看...2 Factor 因子,大部分数据表操作中都很少触及这个项目,但POSTGRESQL 在频繁的UPDATE 中尽量还是考虑这个问题,因为UPDATE = DELETE OLD + INSERT NEW...6 外键与约束,约束本身并不会对表的数据的插入产生过多的影响,而一些设计不好的外键并且带有级联性质的设计,才是对表DML操作带来性能问题的一个因素,减少外键级联的设计,有助于提高POSTGRESQL 的数据的...实际上除了这些,还有trigger的操作,如果 trigger 本身并不是频繁触发,并且里面并不带有大了的UPDATE 语句,那么trigger 还是可以被接受的,但如果trigger 本身里面就带有大了的

    1.1K41

    MySQL数据篇之多表操作-----保姆级教程

    多表操作 外键约束 添加外键 语法 注意 表与表之间的关系 子查询的缺陷 一对多的关系 一对多的建表原则 多对多的关系 多对多的建表原则 一对一的例子 一对一的建表原则 多表案例分析 多表查询...---替代级联删除 join语句中使用USING代替on---键值同名 union联合查询 union all可以查询出所有,不进行去重操作 内连接与外连接的区别 外键约束 作用:保证多表之间的数据完整性...这个时候就需要在多表之间添加外键约束 ---- 添加外键 语法 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(...主键字段名) 在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名...---- 注意 添加外键约束后,如果想要删除主键即某个部门,需要先将该部门下关联的员工记录删除,否则报错。

    1.6K10

    SQL表之间的关系

    SQL表之间的关系要在表之间强制执行引用完整性,可以定义外键。修改包含外键约束的表时,将检查外键约束。定义外键有几种方法可以在InterSystems SQL中定义外键:可以定义两个类之间的关系。...定义关系会自动将外键约束投影到SQL。可以在类定义中添加显式外键定义(对于关系未涵盖的情况)。可以使用CREATE TABLE或ALTER TABLE命令添加外键。...可以使用ALTER TABLE命令删除外键。用作外键引用的RowID字段必须是公共的。引用隐藏的RowID?有关如何使用公用(或专用)RowID字段定义表的信息。一个表(类)的外键最大数目为400。...外键引用完整性检查外键约束可以指定更新或删除时的引用操作。 在CREATE TABLE reference action子句中描述了使用DDL定义这个引用操作。...默认情况下,当删除带有外键的行时,InterSystems IRIS将在相应的被引用表的行上获取长期(直到事务结束)共享锁。这样可以防止在引用行上的DELETE事务完成之前对引用行进行更新或删除。

    3.7K10

    【愚公系列】2023年03月 Java教学课程 100-MySQL数据库(约束)

    文章目录 一、约束 1.约束的概念和分类 2.主键约束 3.主键自动增长约束 4.唯一约束 5.非空约束 6.外键约束 7.外键的级联更新和级联删除(了解) ---- 一、约束 1.约束的概念和分类...UNIQUE 唯一约束 用于保证表中某一列的值唯一 NOT NULL 非空约束 用于保证表中某一列的值不能为空 FOREIGN KEY 外键约束 用于建立表与表之间的关系,保证数据的一致性和完整性 FOREIGN...KEY ON UPDATE CASCADE 外键级联更新 在修改主表中的记录时,自动更新与其关联的从表中的记录。...FOREIGN KEY ON DELETE CASCADE 外键级联删除 在关系型数据库中,当一个表的某个记录被删除时,该表中的外键所关联的记录也会被自动删除的过程。...; -- 添加非空约束 ALTER TABLE student4 MODIFY NAME VARCHAR(20) NOT NULL; 6.外键约束 外键约束概念 让表和表之间产生关系,从而保证数据的准确性

    64600

    【愚公系列】2022年01月 Mysql数据库-约束

    文章目录 前言 1.约束概念 2.约束作用 一、数据库约束 1.约束的分类 2.主键约束 3.主键自动增长约束 4.唯一约束 5.非空约束 6.外键约束 7.外键的级联更新和级联删除 前言 1.约束概念...数据库常见六大约束如下: 1.主键约束 2.非空约束 3.自增长约束 4.非负约束 5.唯一约束 6.外键约束 2.约束作用 数据的完整性是指数据的正确性和一致性,可以通过定义表时定义完整性约束,也可以通过规则...-- 添加非空约束 ALTER TABLE student4 MODIFY NAME VARCHAR(20) NOT NULL; 6.外键约束 外键约束概念 让表和表之间产生关系,从而保证数据的准确性...DELETE FROM USER WHERE NAME='王五'; -- 所以我们需要添加外键约束,让两张表产生关系 外键约束格式 CONSTRAINT 外键名 FOREIGN KEY (本表外键列名...user用户表中的某个用户id修改,我希望订单表中该用户所属的订单用户编号也随之修改 添加级联更新和级联删除 -- 添加外键约束,同时添加级联更新 标准语法 ALTER TABLE 表名 ADD CONSTRAINT

    73810

    【MySQL】008-表的约束

    一、概述 1、概念 对表里的数据进行限定,保证数据的正确性、有效性和完整性; 2、分类 ①主键约束:primary key ②非空约束:not null ③唯一约束:unique ④外键约束:foreign...) ); 注意:添加语句时主键的内容填入NULL即可,会根据上一个主键的值进行自动增加 3、删除自动增长和创建表后自动增长,同非空约束和唯一约束; 六、外键约束 1、描述 个人理解:加入一个部门的员工表...外键列名称 数据类型, constraint 外键名称 foreign key (外键列名称) references 从表名称(关联的从表列(一般是主键)名称) ); 注意:从表要在主表创建之前...主表名 ADD constraint 外键名称 foreign key (外键列名称) references 从表名称(关联的从表列(一般是主键) 外键备注:外键可以为null,但是不能为不存在的外键值...; 七、外键约束——级联操作 1、添加外键,设置级联更新和级联删除 ALTER TABLE 主表名 ADD constraint 外键名称 foreign key (外键列名称) references

    34610

    适用于 JSTS 的 ORM 框架:高质量、松耦合、可扩展 | 开源日报 No.271

    typeorm/typeormhttps://github.com/typeorm/typeorm Stars: 33.5k License: MIT TypeORM 是 TypeScript 和 JavaScript...TypeORM 的核心目标是始终支持最新的 JavaScript 特性,并提供额外的功能,帮助您开发任何类型的数据库应用程序——从具有少量表的小型应用程序到具有多个数据库的大型企业应用程序。...TypeORM 支持 Data Mapper 和 Active Record 两种模式,这与当前存在的所有其他 JavaScript ORM 不同,这意味着您可以以最有效的方式编写高质量、松耦合、可扩展...优雅语法,灵活而强大的 QueryBuilder。 左连接和内连接。 使用联接进行查询的正确分页。 查询缓存。 流式处理原始结果。 日志记录。 监听器和订阅者(钩子)。 支持闭包表模式。...它是一个开源的替代品,不仅可以搜索网络,还能理解你的问题。使用先进的机器学习算法来细化结果,并提供清晰带有来源引用的答案。

    99210
    领券