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

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

例如有两个表      A(a,b)   :a为主键,b为(来自于B.b)      B(b,c,d)   :b为主键       如果我把字段b属性去掉,对编程没什么影响。  ...身份证号是唯一能确定你这个人,其他都可能有重复,所以,身份证号是主键用于与另一张表关联。是能确定另一张表记录字段,用于保持数据一致性。...比如,A表中一个字段,是B表主键,那他就可以是A表。...二、主键和索引区别 定义: 主键--唯一标识一条记录,不能有重复,不允许为空 --表是另一表主键可以有重复, 可以是空值 索引--该字段没有重复值,但可以有一个空值...作用: 主键--用来保证数据完整性 --用来和其他表建立联系用 索引--是提高查询排序速度 个数: 主键--主键只能有一个 --一个表可以有多个 索引--一个表可以有多个唯一索引

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

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

目录 1 表约束 约束,是对表中数据进行限定,保证数据正确性、有效性和完整性,约束分为以下几类: 主键约束:primary key 非空约束:not null 唯一约束:unique 约束:foreign...以上仍然存在一个问题,当在员工表中输入不存部门时,数据依然可以添加,不符合实际,因此,这里就可以通过使用约束来解决。 【概念】什么是约束?...,就是从表中与主表主键对应那一列,如:员工表中dep_id,其中,主表是一方,用来约束别人表,从表可以是多方,被别人约束表。 注意:可以为NULL,但是不能是不存在键值。 ?...列                    constraint 键名称 foreign key (列名称) references 主表名称(主表主键名称)         ); -- 创建部门表...CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id) ); -- 对应主表主键 --

13.7K21

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

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

91040

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

目录 一、数据库设计 二、数据库六种范式 第一范式: 第二范式: 第三范式: 三、主键 主键: : 四、完整性约束 五、建表 六、oracle数据库中多种数据结构 ---- 一、数据库设计...数据建模完成之后,可以把ER图转换成数据中表 1.实体名字转换为表名字 2.实体属性转换为表中列 3.具有唯一特点属性设置为表中主键 4.根据实体之间关系设置为表中某列为列(主外关联...,要求这几个列值联合在一起是非空唯一 : 1.表中某一个列声明为列,一般这个值都会引用于另外一张表主键值(有唯一约束列就可以,不一定非要引用主键列) 2.另外一张表主键列中出现过值都可以在外列中使用...3.列值也可以为空,提前是这个列在表中不做主键,因为我们也可以把表中列当做主键来使用(只有满足非空唯一要求就可以) 4.如果把B表中联合主键引用到A表中做,因为是俩个列在B...表中做联合主键,那么A表引用过来时候也要把俩个列值都引用过来,那么它们在A表中就会作为一个联合出现 四、完整性约束 实体完整性: 引用完整性 列级完整性 用户自定义 五、建表 1.映射实体---

66640

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

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

2.4K20

SQL命令 CREATE TABLE(五)

引用另一个表主键字段。...字段(CustomerNum)和引用字段(CustID)可以有不同名称(或相同名称),但必须具有相同数据类型和字段约束。...如果指定表没有定义主键,则默认为为指定表定义IDENTITY列。 如果指定表既没有定义主键,也没有定义标识列,则默认为RowID。...如果引用了非唯一字段, IRIS会发出SQLCODE-314错误,并在%msg中提供其他信息。 如果字段引用单个字段,则这两个字段必须具有相同数据类型和字段数据约束。...如果是,则更新会导致引用要更新字段将更新级联到所有引用行。 表定义不应该有两个不同名称,这两个引用相同标识符-公共字段并执行相互矛盾引用操作。

1.7K50

mysql约束

(unique) 主键约束(primary key) PK 约束(foreign key) FK 检查约束(目前MySQL不支持、Oracle支持,本文不做介绍) 为了能继续看下去,打开mysql,...在我们平时开发中,大部分情况会给表增加一个'id'主键,用于标识一行数据 主键也是唯一性约束,一个表中不允许出现2条相同主键信息 一般情况下,'id'主键会设置成自增(auto_increment)...主键约束和唯一性约束性质差不多,这里就不多做介绍了 约束 若有两个表A、B,id是A主键,而B中也有id字段,则id就是表B约束主要用来维护两个表之间数据一致性。...注意: 键值可以为null 字段去引用一张表某个字段时候,被引用字段必须具有unique约束(主键也算是unique约束) 有了引用之后,表分为父表和子表  member表:父表 member_point...表:子表 创建先创建父表 删除先删除子表数据 插入先插入父表数据 约束将会让mysql在插入,删除,更新会增加额外判断,严格来说,不允许使用约束,如果需要限制,请在代码层限制

2.1K10

【MySQL】04_约束

+ 非空约束组合) PRIMARY 约束 限定某个表某个字段引用完整性。...FOREIGN KEY 约束 别名:约束 主表和从表/父表和子表 主表(父表):被引用表,被参考表 从表(子表):引用别人表,参考别人表 例如:员工表员工所在部门这个字段值要参考部门表:...例如:学生表、课程表、选课表:选课表学生和课程要分别参考学生表和课程表,学生表和课程表是主表,选课表是从表。 特点: 从表列,必须引用/参考主表主键或唯一约束列。为什么?...,然后才可以删除主表数据 在“从表”中指定约束,并且一个表可以建立多个约束 从表列与主表被参照列名字可以不相同,但是数据类型必须一样,逻辑意义一致。...约束关系是针对双方 添加了约束后,主表修改和删除数据受约束 添加了约束后,从表添加和修改数据受约束 在从表上建立,要求主表必须存在 删除主表时,要求从表从表先删除,或将从表中外引用该主表关系先删除

2.4K20

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

表中任何列都可以作为主键,只要它满足以下主键值规则条件: 任两行不具相同主键值 每行都必须具有一个主键值(主键列不允许NULL) 这里规则是MySQL本身强制实施。... 在一个表中存在另一个表主键称此表 主键选择 数据库中每一条记录都需要有一个唯一标识,依据数据库第二范式,数据库中每一个表中都需要有一个唯一主键,其他数据元素和主键一一对应。...而对于用户表来说,我们需要考虑是作为主键业务字段是否能够唯一标识一个人,一个人可以有多个email和手机号,一旦出现变更email或者手机号情况,就需要变更所有引用信息,所以使用email或者手机作为主键是不合适...并且已有的身份证号码是会变更,比如在1999年时身份证号码就从15位变更为18位,但是主键一旦变更,以这个主键表也都要随之变更,这个工作量是巨大。...因此,我更倾向于使用生成ID作为数据库主键。不单单是因为它唯一性,更是因为一旦生成就不会变更,可以随意引用

2K30

数据库在一对一、一对多、多对多怎么设计表关系

1、一对一可以两个实体设计在一个数据库中l例如设计一个夫妻表,里面放丈夫和妻子 2、一对多可以建两张表,将一这一方主键作为多那一方,例如一个学生表可以加一个字段指向班级(班级与学生一对多关系...) 3、多对多可以多加一张中间表,将另外两个表主键放到这个表中(如教师和学生就是多对多关系) ---- 关于设置: 首先,引用那个列在主表中必须是主键列或者唯一列。...所以1:n肯定把建立在n那张表上。 1:1,一般要看谁是主表,谁是附属表,当然建立在附属表中。...这是不允许,班级表内班级为主键,是唯一不允许相同记录; 下面简单讲下大概建成表结构 --建班级表 create table class( classid int primary key,...ID为主键 classid int ,--键值,跟班级表classid 属性类型相同 stuname varchar(20),--学生姓名 ---定义 foreign key(classid

4.6K20

一个诡异SQL事务现象

用实验来复现下这个问题, (1) 创建测试表,A表id字段是主键,B表id_a字段是,参考A表id主键, ?...可以看出,更新表A操作正常,但使用表A主键值id=1,来INSERT表B时候,报了FK_B_A完整性约束错误。...明明A表有id=1记录,并且更新UPDATE操作成功了,为什么用id_a=1来INSERT表B,提示了完整性约束错误,其含义就是无法从主表找出字表要INSERT键值id=1,两者相矛盾么?...此时检索下约束信息,表B约束FK_B_A,即ID_A字段,参考引用是约束PK_A, ?...报错原因是因为有子表参考引用了这张表唯一/主键,和删除数据相同,必须从子表开始操作,关系干净了,然后才能操作主表。 ?

58650

约束

,,让某字段在整个表中是唯一 PRIMARY KEY #主键约束 FOREIGN KEY #约束 CHECK #检查约束 8.0才支持,5.7还不支持 DEFAULT #默认值约束 非空约束 建表时候给它约束...FOREIGN KEY约束 约束 约束会涉及到主表和从表 主表(父表):被引用表 从表(子表):引用别人表 从表必须引用主表主键或者唯一性约束列 在创建时候,如果不给约束的话...,默认名不是列名,而是自动产生一个键名,当然也可以指定约束名 创建表顺序,先创建主表,再创建从表 删表,先删从表,再上主表 从表列和主表列名字可以不相同,但是数据类型必须一样。...当创建约束时,系统默认会在所在列上创建对应普通索引,索引名就是约束名。...在阿里开发规范中:不得使用约束与级联,一切概念必须在应用层解决 CHECK约束 检查模字段值是否复合要求 MySQL5.7可以支持该约束,但是不起作用。

76120

MySql---复习

是表一个字段,不是本表主键,但对应另一个表主键。定义后,不允许删除另一个表中具有关联关系行。 主要作用是保持数据一致性、完整性。...也就是说,只要每个非空值出现在指定主键中,这个内容就是正确中列数目必须和父表主键中列数目相同,因为有组合主键和组合。...中列数据类型必须和父表主键中对应列数据类型相同。...REFERENCES 主键列1 [,主键列2,…] 其中:键名为定义约束名称,一个表中不能有相同名称;字段名表示子表被健约束字段名;主表名即被子表所依赖名称;主键列表示主表中定义主键列或者列组合...(字段名) [引用]; 设置级联修改和删除关系 #先将表之前约束删除 ALTER TABLE emp DROP FOREIGN KEY emp_depart_fk; #修改表时,增加约束和级联约束

5.2K30

MySQL从删库到跑路_高级(一)——数据完整性

C、引用完整性:在删除和输入记录时,引用完整性保持表之间已定义关系。引用完整性确保键值在所有表中一致,不能引用不存在值.如果一个。...MyISAM类型存储引擎不会在主键列上创建索引,表中记录存储顺序与插入顺序相同。 ? InnoDB存储引擎会自动在主键列上创建索引,插入记录会根据主键顺序排放。...四、参照完整性 1、参照完整性简介 MySQL参照完整性一般是通过MySQL(foreign key)实现(仅innoDB支持)所引用列必须是主键。...声明包括三个部分: A、哪个列或列组合是 B、指定参照表和列 C、参照动作[cascade(级联操作),restrict(拒绝操作),set null(设为空),no action,set...如果约束指定了参照动作,主表记录做修改,删除,从表引用列会做相应修改,或不修改,拒绝修改或设置为默认值。 引用列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。

1.9K20

带你学MySQL系列 | 一文让你真正理解MySQL数据库“完整性约束”?

添加约束:foreign key 引用完整性会降低sql执行效率,有时候能不用就不用。...引用完整性指的是,一张表中字段取值,需要参照另一张表中某个字段取值。这里涉及到就是:foreign key。...一般情况下,本表中这个字段设置foreign key,参考表中那个字段取值,就需要设置为那个表主键。...下面我们用一张图带着大家理解: 特别注意: 2)添加约束(foreign key) 需要记住一句话:先有被引用表,然后才可以给当前表添加约束,否则,你引用谁去?...添加约束,有以下2种方式: 方式一:创建表时候,给字段添加约束。

61640

MySQL 约束介绍

在创建唯一约束时候,如果不给唯一约束命名,就默认和列名相同。 MySQL会给唯一约束列上默认创建一个唯一索引。...主键约束相当于唯一约束+非空约束组合,主键约束列不允许重复,也不允许出现空值 一个表最多只能有一个主键约束 主键约束对应着表中一列或者多列 如果是多列组合复合主键约束,那么这些列都不允许为空值,...限定某个表某个字段引用完整性 从表列,必须引用/参考主表主键或唯一约束列 在创建约束时,如果不给约束命名,默认名不是列名,而是自动产生一个键名(例如student_ibfk_1...创建(CREATE)表时就指定约束的话,先创建主表,再创建从表 删表时,先删从表(或先删除外约束),再删除主表 从表列与主表被参照列名字可以不相同,但是数据类型必须一样,逻辑意义一致 在“...从表”中指定约束,并且一个表可以建立多个约束 当创建约束时,系统默认会在所在列上建立对应普通索引,索引名是约束名,删除外约束后,必须手动删除对应索引 CREATE TABLE

1.6K41

关系模型基本概念

:在关系中能唯一标识元组属性或属性集称为关系模式; 候选:不含多余属性称为候选主键:用户选作元组标识候选称为主键。...一般不加说明键指主键:如果模式R中属性K是其他模式主键,那么K在模式R中称为。 关系中每一个属性都有一个取值范围,称为属性值域(Domain),属性A取值范围用DOM(A)表示。...关系定义和性质 关系是一个属性数目相同元组集合。...参照完整性规则: 这条规则实质是“不允许引用不存在实体”。该规则在具体使用时有三点可变通: 和相应主键可以不同名,只要定义在相同值域上即可; 可以引用本关系中主键。...这样表示同一个关系中不同元组之间联系; 键值是否为空,应视具体情况而定。 用户定义完整性原则: 建立关系模型时对属性定义了数据类型可能还满足不了用户需求。

2.3K00

MySQL约束详接

唯一约束可以是某一个列值唯一,也可以多个列组合值唯一。 唯一性约束允许列值为空。在创建唯一约束时候, 如果不给唯一约束命名,就默认和列名相同。...如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和()中排在第一个列名相同。也可以自定义唯一性约束名。...如果数据库重启,InnoDB会根据重做日志中信息来初始化计数器内存值。 FOREIGN KEY 约束 作用 限定某个表某个字段引用完整性。...FOREIGN KEY关键字  主表和从表/父表和子表 主表(父表):被引用表,被参考表从表(子表):引用别人表,参考别人表 例如:员工表员工所在部门这个字段值要参考部门表:部门表是主表,员工表是从表...总结:约束关系是针对双方添加了约束后,主表修改和删除数据受约束添加了约束后,从表添加和修改数据受约束在从表上建立,要求主表必须存在删除主表时,要求从表从表先删除,或将从表中外引用该主表关系先删除

1.8K10

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券