`
sangei
  • 浏览: 336411 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

主键和外键

阅读更多

 

主键的存在就代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,本记录的修改与删除,当我们没有主键时,这些操作会变的非常麻烦。

我强调主键不应该具有实际的意义,这可能对于一些朋友来说不太认同,比如订单表吧,会有“订单编号”字段,而这个字段呢在业务实际中本身就是应该具有唯一性,具有唯一标识记录的功能,但我是不推荐采用订单编号字段作为主键的,因为具有实际意义的字段,具有“意义更改”的可能性,比如订单编号在刚开始的时候我们一切顺利,后来客户说“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,这样原来的主键就面临危险了。因此,具有唯一性的实际字段也代表可以作为主键。因此,我推荐是新设一个字段专门用为主键,此主键本身在业务逻辑上不体现,不具有实际意义。而这种主键在一定程序增加了复杂度,所以要视实际系统的规模大小而定,对于小项目,以后扩展不会很大的话,也查允许用实际唯一的字段作主键的。 

1.主键约束: 一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。

2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL。

3.主键与Unique:不同点在于一个表只能有一个主键约束,但是可以有多个Unique约束;主键所有字段都是not null,unique可以是null。相同点在于都能保证唯一性。

4.主键、Unique与索引:主键约束与Unique约束默认会成为索引。当主键和Unique有多个字段时,有索引前缀性问题,即where语句中的条件必须有主键或者unique的第一个字段,否则不会使用索引。

5. 外键与主键、Unique:外键必须为另外一张表(父表)的主键或者唯一索引。如果要添加记录,而父表中没有则报错。反之,如果要删除父表中的记录,而子表中有记录,也会报错。但是如果在创建外键约束时,如果使用on delete cascade,则删除父表中数据时,不报错而直接把子表关联的数据删除。如果要删除父表,则需要加上cascade constraints,此时子表的foreign key被去除,表中记录保持不变。
--标红色的部分是外企的一道DBA面试题。其实主键约束和unique约束的区别也可以出一道题。
楼上的几位都解释了主键的作用,我主要说下设和不设有啥区别:
比如:
张三的身份证号为123456
李四的身份证号为012345
设置身份证号为主键后,那么数据库就约束你身份证号不能重复,不能为空,那么:
你向数据库表插入王五的身份证号为123456,则提示你主键不能重复之类的错误;
也许你要问,那就是保证不重复吗?主键可以保证不重复,并且不能为空,如果仅仅保证不重复的效果,可以只设置为索引就行了;
最后,主键可以是单字段主键,也可以2个或多个字段合并在一起形成联合主键。

example:外键必须是主键的所有列

create table test1 
(
   ID1                   NUMBER               NOT NULL,
   ID2                   NUMBER               not null,

   CONSTRAINT PK_STATE_UI_MAP_MAPPING PRIMARY KEY (ID1,ID2)
);

create table test2
(
   ID3                   NUMBER               NOT NULL,
   ID4                   NUMBER               not null,

   CONSTRAINT xxx Foreign KEY (ID3) REFERENCES test1 (ID1)  //wrong
   CONSTRAINT xxx Foreign KEY (ID3,ID4) REFERENCES test1 (ID1,ID2));//right

 

分享到:
评论

相关推荐

    数据主键和外键的错误总结

    - **解决方法**:确保外键和主键的数据类型完全一致。 5. **重载的外键**:当一张表通过多个字段同时指向另一张表时,这种设计被称为重载的外键。这增加了数据维护的复杂度。 - **解决方法**:尽量减少重载的...

    主键和外键.doc

    #### 二、主键、外键和索引的区别 - **主键**:唯一标识一条记录,不允许有重复,不允许为空。 - **外键**:表的外键是另一表的主键,外键可以有重复,可以是空值。 - **索引**:索引字段没有重复值,但可以有一个...

    oracle表主键和外键的区别

    在数据库设计中,主键和外键是两个关键的概念,它们在确保数据的完整性和一致性方面发挥着重要作用。主键和外键都是Oracle等关系型数据库管理系统(RDBMS)中的重要概念。 **主键**是定义一个表中起主要作用的数据项...

    数据完整性、主键和外键、数据类型

    ### 数据完整性、主键和外键、数据类型 #### 数据完整性 数据完整性是数据库设计中的一个核心概念,指的是确保数据库中的数据保持一致性和准确性。在实际应用中,数据完整性能够帮助我们防止非法或错误的数据被...

    SQL中的主键和外键.doc

    #### 二、主键、外键和索引的区别 **1. 主键** - **定义**:主键是一组唯一标识一条记录的字段,不允许为空。 - **作用**:确保数据的唯一性,用来保证数据完整性。 - **个数**:每个表只能有一个主键。 **2. ...

    SQL的主键和外键的作用.doc

    SQL的主键和外键是关系型数据库设计中的关键概念,它们对于确保数据的完整性和一致性至关重要。主键是用于唯一标识表中每一行记录的字段,而外键则是用于连接不同表之间的关联。 首先,主键的作用在于确保数据的...

    数据库主键和外键设计的原则.doc

    数据库主键和外键设计的原则

    24.Oracle的主键和外键1

    在数据库设计中,主键和外键是确保数据完整性和一致性的重要工具,特别是在Oracle这样的关系型数据库管理系统中。主键和外键的概念以及它们的作用对于理解数据库的结构和操作至关重要。 首先,主键是表的一个或多个...

    数据库技术与应用 设置成绩表主键和外键约束-A学习任务书.doc

    在数据库设计中,主键和外键是两个关键的概念,它们用于确保数据的完整性和一致性。主键是一种特殊的唯一标识符,用于唯一地识别表中的每一行数据;而外键则是连接不同表之间的桥梁,它引用了另一个表的主键,以建立...

    深入理解数据库关系:主键与外键的选择与应用

    主键和外键是数据库设计中不可或缺的部分。正确选择和使用它们可以确保数据的完整性、一致性和安全性。在实际开发中,应根据业务需求和数据模型仔细设计主键和外键,以实现最优的数据管理和性能。 本文通过详细解释...

    oracle主键和外键[文].pdf

    在Oracle数据库中,主键和外键是关系型数据库中非常重要的概念,它们用于确保数据的一致性和完整性。主键是定义在一个表中用来唯一标识每一行的字段,而外键则是另一个表中的字段,它引用了主键来建立两个表之间的...

    如何区分SQL数据库中的主键与外键

    在SQL数据库中,主键和外键是关系型数据库设计的核心概念,它们对于确保数据的完整性和一致性至关重要。主键是表中一个或一组字段,它们的值在该表内是唯一的,用来唯一标识一条记录。例如,在学生表中,学号可能是...

    关于数据库主键和外键 终于弄懂啦.doc

    关于数据库主键和外键 终于弄懂啦

    oracle建表练习(主键外键)

    在本次Oracle建表练习中,我们将会重点讨论建表时使用的主键(Primary Key)和外键(Foreign Key)概念。 首先,我们来详细了解一下主键的概念。主键是数据库表中每一行记录的唯一标识,它保证了表中的每条记录都能...

    (mysql面试题)MySQL中的索引、主键和外键的概念及其作用及代码展示.txt

    ### MySQL中的索引、主键和外键的概念及其作用 #### 1. 索引(Index) **定义与作用** 索引是数据库中一种特殊的数据结构,它能够显著提高查询速度。通过索引,数据库管理系统可以快速地定位到表中的特定行,而...

    主键与外键的创建

    在数据库设计中,主键和外键是两个关键概念,它们是关系数据库中确保数据完整性和一致性的核心机制。本文将深入探讨主键与外键的创建,帮助初学者更好地理解这两个概念。 **主键(Primary Key)**是用于唯一标识...

Global site tag (gtag.js) - Google Analytics