《SQL初学者指南(第2版)》——1.4 主键和外键
本节书摘来自异步社区出版社《SQL初学者指南(第2版)》一书中的第1章,第1.4节,作者:【美】Larry Rockoff,更多章节内容可以访问云栖社区“异步社区”公众号查看。
请留意每个表的第1列:即Customers表中的CustomerID和Orders表中的OrderID。这些列通常称为主键(primary key)。主键之所以有用和有必要,有两个原因。首先,它们使你能够唯一地标识表中一个单独的行。例如,如果想要查找Bob Davis这一行,我们可以只使用CustomerID列来获取数据。主键还确保了唯一性。当指定CustomerID列作为主键时,就保证了表中的该列针对每一行都拥有一个唯一的值。即使在数据库中有两个不同的人都叫做Bob Davis,这两行的CustomersID列的值也会不同。
在这个示例中,主键列的值没有任何特殊含义。在Customers表中,CustomerID列在表的3行中的值分别为1、2和3。我们会经常以这样的一种方式来设计数据库的表:当表中增加新的行时,主键列会自动生成顺序的编号。通常,我们把这种设计特性叫做自增型(auto-increment)。
使用主键的第2个原因是,可以很容易地把一个表和另一个表进行关联。在这个例子中,Orders表中的CustomerID列,指向了Customers表中对应的一行。查看一下Orders表的第4行,会发现其CustomerID列的值是3。这就意味着,CustomerID为3的客户下了这个订单,这位客户名为Connie King。在表之间使用共同的列,这是关系型数据库中的一项基本的设计要素。
除了可以指向Customers表,还可以把Orders表中的CustomerID列指定为外键(foreign key)。我会在第18章中详细介绍外键,在这里只需要知道:定义外键是为了要确保这一列有一个有效的值。例如,我们希望Orders表中的CustomerID列的值,必须是Customer表中真正存在的一个CustomerID值。指定一列作为外键,就可以实现这种限制。
SQL关系模型之主键 上期我们介绍了关系模型和关系数据库,那么这个“关系”到底是由谁来决定的呢?难道我处理数据的时候还要看某个值原本的意义吗? 笔者认为一般来说,数据库的使用者应当对数据有一定的认知,但是如果所谓的数据关系是靠使用者的理解来自行定义,恐怕有失严谨。 毕竟换个人操作,理解就有可能不一样嘛,那关系数据库各个表的关系就随之变化了?显然不现实。 事实上,我们的关系数据库中,关系是由“主键”和“外键”来维护的。今天我们就主要来看看主键——
(解释文)My SQL中主键为0和主键自排约束的关系 上一篇我们说了关于自排如果主键是0的问题,在这里我搞清楚了原因,导致这种情况是因为在SQL中对自排设置了初始值: 从这里可以看到这两个变量一个是自增的初始值,一个是增量,这里都是1,所以在设置自增的时候会把那个字段原来存在的所有0变成从1开始的步长为1的等差数列。
SQL 修改主键约束 原文:SQL 修改主键约束 今天在学习数据库的时候遇到一个关于如何修改主键约束的问题,抄录下来以供备用。 --修改主键约束用SQL --获取主键约束名字 declare @csname varchar(100) set @csna...
MS SQL SERVER搜索某个表的主键所在的列名 原文:MS SQL SERVER搜索某个表的主键所在的列名 SELECT SYSCOLUMNS.name FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYS WHERE SYSCOLUMNS.
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- 在Sql Server 2005中将主子表关系的XML文档转换成主子表“Join”形式的表
- Sql Server之旅——第十二站 sqltext的参数化处理
- SQL 序列生成器
- SQL Server账号密码(sa)登录失败 错误原因:233
- mysql 必知必会整理—sql 计算函数[六]
- 【Teradata SQL】数据库中查询 一个字段包含另一个字段sql
- 利用SQL查询扶贫对象医保报销比率的审计方法
- PL/SQL动态SQL(原创)
- Visual Studio 2010生成SQL Server测试数据
- 对于PowerDesigner中设计表自动生成Sql的分析
- SQL SERVER服务器链接连接(即sql server的跨库连接)
- SQL有三个类型的索引,唯一索引 不能有重复,但聚集索引,非聚集索引可以有重复
- Atitit sql查询语法 SQL SELECT完整语法3 1.SELECT语法3 2.FROM子句5 3.WHERE子句6 下面两张表将在后面使用到7 1.比较运算符7 2.逻辑
- Atitit mybatis使用简明教程 目录 1.1. Mybatis.xml 配置文件1 1.2. Datamp.xml mapper文件主要作用是分模块放sql语句2 1.3. 查询
- Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)
- SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)
- 【SQL干货】一条sql查出来全国空气质量排名
- 全网多种方法解决You have an error in your SQL syntax; check the manual that corresponds to your MySQL server
- SQL Server里的 ISNULL 与 NULLIF
- 010-Hadoop Hive sql语法详解5-HiveQL与SQL区别
- sql 精读(三) 标准 SQL 中的编号函数示例
- Oracle PL/SQL中的循环处理(sql for循环)
- 【SQL Server】数据库开发指南(三)面向数据分析的 T-SQL 编程技巧与实践
- 【SQL Server】数据库开发指南(二)MSSQL数据库开发对于库、表、数据类型、约束等相关操作
- 【SQL Server】数据库开发指南(一)数据库设计