SQL Server主键与外键设置以及相关理解

目录
  • 一、定义与作用
  • 二、SSMS设置表的主键与外键
    • 1、利用SQL语句建立查询设置
    • 2、利用鼠标点击操作创建(SSMS环境下)
  • 三、主键表与外键表(个人的总结与反思...)
  • 补充:SQL Server的主键与外键约束
  • 总结

一、定义与作用

主键:表中能够唯一地辨别事物的属性。通过主键能够查询出表中一条完整的记录,同时使用主键能防止表中出现重复的记录,避免了数据的冗余。

外键:通俗讲就是表中一个属性是来自另一张表的主键,该属性被称为该表的外键,外键可以有不止一个。外键存在的意义就是将事物与事物之间联系起来。

二、SSMS设置表的主键与外键

1、利用SQL语句建立查询设置

举了一个学生、课程以及学生成绩关系表的例子:

--代码
create table [表名] (
    属性名 类型 primary key,
    属性名 类型 foreign key references [外键来自的表](外键的属性名),
    属性名 类型 not null,
    属性名 类型 null,
        ···  ···);

--实例
create table Student(                        --创建Student表
	Stu_id varchar(10) primary key,          --学号Stu_id设置为主键
	Stu_name nvarchar(10) not null,          --学生姓名
	Stu_sex nvarchar(2) default '男');       --学生性别,设置默认值为'男'

create table Course(                         --创建课程信息表Course
	Course_id varchar(4) primary key,        --课程编号Course_id设置为主键
	Course_name varchar(10) not null);       --课程姓名

create table StudentGrade(                                            --创建成绩表
	stu_id varchar(10) foreign key references Student(Stu_id),        --学生学号设置为外键
	Course_id varchar(4) foreign key references Course(Course_id),    --课程号设置为外键
	Grade int null);                                                  --学生成绩

2、利用鼠标点击操作创建(SSMS环境下)

1) 设置主键

a.在已创建Student表的前提下,点击Student表,右击,选择<设计>

b.选择属性Stu_id,右击,选择设置主键

设置完成,Course表主键设置同上。

2)设置外键

a.选择StudentGrade表,如1)中a所示选择<设计>

b.选择属性Stu_id,右击,选择<关系>

c.在弹出的窗口选择<添加>

d.点击表和列规范最右边的三个小点(白色背景可能看不到,但点最右边也差不多了)

e.关系名可以重新编辑,最好是能让自己记得住或看得懂含义的名字。将主键表和外键表设置完后点击右下方确认即可。

三、主键表与外键表(个人的总结与反思...)

刚开始上课的时候我就有点搞不清主键表与外键表,特别是设置的这张图里,

(假设正在设置的这张StudentGrade表称为本表,其他表相对地称为外表),我认为外键表应该是指外键本来所在的表,即外表,因此应该设置为Student才对,但是这个框框一直编辑不了;而主键表应该指我正在编辑的这张StudentGrade表才对,但是当选择StudentGrade之后,下面列选项的框框就变成空的,没有列可选。

但是将两个操作互换后又能得到想要的结果,所以当时就半懵半混过去了。

然后偶然听到郝斌老师的课之后才恍然大悟。

首先,主键表应该是指外键所来自的那个表,即例子中的Student表,在Student表中Stu_id是该表的主键,因此该表称为主键表;而外键表则指Stu_id扮演外键的时候所在的表,即例子中StudentGrade表。

补充:SQL Server的主键与外键约束

SQL Server的主键与外键约束SQL Server有许多的重要知识,开始也说过许多的SQL知识了。SQL Server中的约束也是一个重要性的知识,下面我来说说关于SQL Server约束的知识。

首先我们来说说SQL sever的主键约束:主键是唯一标识表中每一行的列或一组列。可以使用 PRIMARY KEY 约束为表创建主键。如果主键只包含一列,则可以将 PRIMARY KEY 约束定义为列约束,如果主键有两列或更多列,则必须使用 PRIMARY KEY约束作为表约束(代码如图所示):

每个表只能有一个主键。参与主键的所有列必须定义为 NOT NULL。如果没有为这些列指定 NOT NULL 约束,SQL Server会自动为所有主键列设置 NOT NULL 约束。在创建主键时,SQL Server还会自动创建唯一的聚簇索引(如果指定,则为非聚集索引)。

接下来就是外键约束:SQL Server外键约束简介外键是一个表中的一列或一组列,它唯一地标识另一个表的行。 vendor_groups 和vendor表,它们的结构(如图所示):

每个供应商属于供应商组,每个供应商组可能有零个或多个供应商。 vendor_groups 和 vendors 表之间的关系是一对多的。对于 vendors 表中的每一行,始终可以在 vendor_groups 表中找到相应的行。但是,如果使用当前表创建方式,可以在vendors 表中插入一行而不在 vendor_groups 表中显示相应 的行。 还可以删除 vendor_groups 表中的行,而无需更新或删除 vendors 表中导致 vendors 表中存在孤立的行。要强制执行 vendor_groups 和 vendors 表中的数据之间的链接,需要在 vendors 表中建立外键。要创建外键,请使用 FOREIGN KEY 约束。以下语句删除 vendors 表并使用 FOREIGN KEY 约束重新创建它:

现在,vendor_groups 表称为父表,该表是外键约束引用的表。 vendors 表称为子表,该表是应用外键约束的表。

总结

到此这篇关于SQL Server主键与外键设置以及相关理解的文章就介绍到这了,更多相关SQL Server主键与外键设置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何获取SqlServer2005表结构(字段,主键,外键,递增,描述)

    1.获取表的基本字段属性 复制代码 代码如下: --获取SqlServer中表结构 SELECT syscolumns.name,systypes.name,syscolumns.isnullable,syscolumns.length FROM syscolumns, systypes WHERE syscolumns.xusertype = systypes.xusertype AND syscolumns.id = object_id('你的表名') 运行效果 2.如果还想要获取字段的描述

  • SQL Server 创建约束图解(唯一 主键)

    SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创建和使用的方法. 什么是主键? 在数据库中,常常不只是一个表,这些表之间也不是相互独立的.不同的表之间需要建立一种关系,才能将它们的数据相互沟通.而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的.通过这个字段中不同的值可以区别各条记录.就像我们区别不

  • SQLServer主键和唯一约束的区别

    首先说明一点,主键又称主键约束,它也是一种约束,看下它和唯一约束的创建语法: alter table Person add constraint PK_Id primary key (Id) alter table Person add constraint UQ_Name unique (Name) 主键和唯一约束都要求字段值唯一,除此外,它们还有如下区别: ·同一张表只能有一个主键,但能有多个唯一约束: ·主键字段值不能为NULL,唯一约束字段值可以为NULL: ·主键字段可以做为其他表的外

  • sqlserver主键设计的注意点

    在设计主键的时候往往需要考虑以下几点: 1.无意义性:此处无意义是从用户的角度来定义的.这种无意义在一定程度上也会减少数据库的信息冗余.常常有人称呼主键为内部标识,为什么会这样称呼,原因之一在于"内部",所谓内部从某种程度上来说就是指表记录,从大的范围来说就是数据库,如果你在设计的时候选择了对用户来说有意义的信息来作为主键,那么迟早会面对用户提出对这块信息进行更新的需求,那么你就违背了它应有的静态. 2.静态性:主键除了唯一地标识一条记录及外键的关联外,应不再考虑其他的意义,最理想的状

  • SQL Server设置主键自增长列(使用sql语句实现)

    1.新建一数据表,里面有字段id,将id设为为主键 复制代码 代码如下: create table tb(id int,constraint pkid primary key (id)) create table tb(id int primary key ) 2.新建一数据表,里面有字段id,将id设为主键且自动编号 复制代码 代码如下: create table tb(id int identity(1,1),constraint pkid primary key (id)) create

  • 小议sqlserver数据库主键选取策略

    因为主键可以唯一标识某一行记录,所以可以确保执行数据更新.删除的时候不会出现张冠李戴的错误.当然,其它字段可以辅助我们在执行这些操作时消除共享冲突,不过就不在这里讨论了.主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致.所以数据库在设计时,主键起到了很重要的作用. 常见的数据库主键选取方式有: 自动增长字段 手动增长字段 UniqueIdentifier "COMB(Combine)"类型 一.自动增长型字段 很多数据库设计者喜欢使用自动增长型字段,因为它使用简单.

  • sqlserver数据库主键的生成方式小结(sqlserver,mysql)

    主键的生成方式主要有三种: 一. 数据库自动生成 二. GUID 三. 开发创建 严格讲这三种产生方式有一定的交叉点,其定位方式将在下面进行讲解. 第一种方式,主要将其定位在自增长的标识种子:可以设置起始数值,及增长步长.其优点在于使用时完全将并发任务交于数据库引擎管理,你不用担心存在多用户使用的时候会产生两个相同的ID的情况.其缺点也在于此,多数的数据库不提供直接获取标识ID的方式,对于开发人员来说产生ID的方式是透明的,开发人员几乎无法干预此项.对于数据的迁移也不是很方便. 由于存在上面的利

  • SQL Server主键与外键设置以及相关理解

    目录 一.定义与作用 二.SSMS设置表的主键与外键 1.利用SQL语句建立查询设置 2.利用鼠标点击操作创建(SSMS环境下) 三.主键表与外键表(个人的总结与反思...) 补充:SQL Server的主键与外键约束 总结 一.定义与作用 主键:表中能够唯一地辨别事物的属性.通过主键能够查询出表中一条完整的记录,同时使用主键能防止表中出现重复的记录,避免了数据的冗余. 外键:通俗讲就是表中一个属性是来自另一张表的主键,该属性被称为该表的外键,外键可以有不止一个.外键存在的意义就是将事物与事物之

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

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 用户表(用户名.密码.登录级别) 其中用户名是唯一的, 用户名就是一个主键 上机记录表(卡号,学号,姓名.序列号) 上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键 上机记录表中的序列号不是成绩表的

  • SQL Server主键约束(PRIMARY KEY)

    目录 SQL Server PRIMARY KEY(主键)约束简介 SQL Server PRIMARY KEY约束示例 SQL Server PRIMARY KEY(主键)约束简介 主键是唯一标识表中每一行的一列或一组列.您可以使用主键约束为表创建主键.如果主键仅包含一列,你可以使用PRIMARY KEY约束作为列约束: CREATE TABLE table_name ( pk_column data_type PRIMARY KEY, ... ); 如果主键有两列或多列,则必须将主键约束用作

  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply 先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php?id=1   表示我要访问的是帖子id是1 的帖子- 再来说说外键,当我们删除某个帖子的时候,需要执行另一个操作,就是删除所有回帖,如果正常情况下,我们需要执行两次delete操作(thread和 reply),这时候如果存在外键,例如,在reply 表里面建立一个指向thread表

  • 简述MySQL主键和外键使用及说明

    目录 一.外键约束 什么是外键: 外键的使用条件: 外键的定义语法: 简单演示使用 一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支

  • MySQL语句中的主键和外键使用说明

    目录 一.主键: 1.1)主键字段定义: 1.2) 创建: 1.3)主键的选取原则: 1.4)主键值的生成方式: 二.外键: 2.1)外键定义: 2.2)外键(约束)创建(不推荐使用,一般不进行外键约束,只进行外键约定): 2.3)外键出现的情况: 三.主键和外键的区别总结: 一.主键: 1.1)主键字段定义: 在数据库表中,如果有一组字段能够唯一确定一条记录,则可以把它们设计成表的主键字段. 例子:如果要创建一个人的信息表(字段:姓名,年龄,籍贯,工作单位......),那么身份证号是唯一能确

  • Django REST Framework序列化外键获取外键的值方法

    需求:序列化外键,获取外键的除id之外的值 使用Django REST Framework虽然开发接口快速,但是如果想要获取到除外键id值之外的外键信息,直接继承serializers.ModelSerializer类,然后在fields中指定返回的字段是获取不到外键的其他值的,比如我现在需要外键的name属性值,下面就给大家介绍两种方法通过序列化外键来获取我们想要的外键的值. 这里有两个Model:问卷(Questionnaire):问题(Question).一张问卷中包含多个问题,问题通过外

  • SQL语句删除和添加外键、主键的方法

    --删除外键 语法:alter table 表名 drop constraint 外键约束名 如: alter table Stu_PkFk_Sc drop constraint FK_s alter table Stu_PkFk_SC drop constraint FK_c --添加外键 语法:alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名) 如: alter table Stu_PkFk_Sc

  • DataSet 添加数据集、行、列、主键和外键等操作示例

    前台代码:html <%@ Page language="c#" Codebehind="CodeUse.aspx.cs" AutoEventWireup="false" Inherits="DsAndXML.CodeUse" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML>  

  • Sql server 2008 express远程登录实例设置 图文教程

    打开SQL Server 配置管理器 确保TCP/IP已经启用 2.查看属性,有的可能设置为1433 我的机器没有设置过,是这样: 端口号为2104,你也可以自己设置一个数值较大的端口号,设置完后重新启动SQL SERVER,其它不用重启 配置防火墙的"高级设置 ",将C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn\sqlservr.exe,"新建规则"到"入站规则&q

随机推荐