精华内容
下载资源
问答
  • 主键和外键

    2018-06-24 17:31:23
    1.定义1.1 什么是主键和外键1.2 主键和外键的作用1.3 主键、外键和索引的区别2.主键(primary key)2.1 通过SSMS设置主键2.2 通过SQL语句设置主键3.外键(foreign key)3.1 通过SSMS设置外键3.2 通过SQL语句...

    1.定义

    2.主键(primary key)

    3.外键(foreign key)

    4.SQL语句向已存在表设置主键和外键

    1.定义

    1.1 什么是主键和外键

    关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
    比如:
    学生表(学号,姓名,性别,班级)
    其中每个学生的学号是唯一的,学号就是一个主键

    课程表(课程编号,课程名,学分)
    其中课程编号是唯一的,课程编号就是一个主键

    成绩表(学号,课程号,成绩)
    成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键

    成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键

    1.2 主键和外键的作用

    1.2.1为了维护关系数据库的完整性:
    主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

    外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

    1.2.2起约束作用:
    外键取值规则:空值或参照的主键值。
    (1)插入非空值时,如果主键表中没有这个值,则不能插入。
    (2)更新时,不能改为主键表中没有的值。
    (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
    (4)更新主键记录时,同样有级联更新和拒绝执行的选择。

    1.3 主键、外键和索引的区别

    区别主键外键索引
    定义唯一标识一条记录,不能有重复的,不允许为空表的外键是另一表的主键, 外键可以有重复的, 可以是空值该字段没有重复值,但可以有一个空值
    作用用来保证数据完整性用来和其他表建立联系用的是提高查询排序的速度
    个数主键只能有一个一个表可以有多个外键一个表可以有多个唯一索引

    参考网站:SQL的主键和外键的作用

    2.主键(primary key)

    2.1 通过SSMS设置主键

    2.1.1打开之前建立的表,即选择 数据库->SSMSTest->表->dbo.student 右键单击dbo.student选择设计。

    2.1.2在sno处右键单击选择设置主键。

    2.1.3这时可以看到sno前面出现了一个钥匙一样的图标,这就代表着sno已经被设置为主键了。点击一下保存或者按Ctrl+S就可以保存了。
    2.1.4按照以上步骤打开dbo.course,右键单击cno选择设置主键。保存。

    2.1.5按照以上步骤打开dbo.sc,按住shift依次点击sno和cno前面的小框按钮,就可以同时选中这两行。然后再右键单击选择设置主键。保存。

    2.1.6至此,已经完成了三张表的主键设置。

    2.2 通过SQL语句设置主键

    2.2.1选择 数据库->SQLTest,点击新建查询,注意左上角的框里是SQLTest,不是的话手动选择一下。

    2.2.2在点击新建查询出来的界面中输入以下代码:

    --这是SQL中的注释信息,使用两个减号来注释。
    drop table student    --删除表student
    create table student  --创建表student
    (sno char(4) primary key,  --设置sno为主键
    sname char(8),
    sage int,
    ssex char(2),
    sdept char(20)
    )
    
    drop table course    --删除表course
    create table course  --创建表course
    (cno char(4) primary key,  --设置cno为主键
    cname char(8),
    cpno char(4),
    ccredit int
    )
    
    drop table sc    --删除表sc
    create table sc  --创建表sc
    (sno char(4),
    cno char(4),
    grade int,
    primary key(sno, cno)  --设置sno和cno的属性组为主键
    )

    2.2.3点击上面的执行,或者按F5之后出来了如下画面。

    2.2.4右键SQLTest点击刷新或者按F5,然后选择表,右键单击选择设计,能看到三张表都已经设置主键了。



    2.2.5至此,已经完成了三张表的主键设置。

    3.外键(foreign key)

    3.1 通过SSMS设置外键

    3.1.1选择 数据库->SSMSTest->表->dbo.sc 右键单击dbo.sc选择设计。

    3.1.2右键单击sno或者cno,选择关系。

    3.1.3点击左下角的添加。

    3.1.4在 表和列规范 后面的框中点一下,就会出现后面的三个点的按钮,点击三个点图标的那个按钮。

    3.1.5因为sc中的sno引用了student中的sno,所以主键表那里选择student,然后选择对应的sno。而sc中的cno因为引用的是course中的sc,所以在这里没法设置外键,需要等下再设置,在这里把它选择为无。点击确定。


    3.1.6再次点击左下角的添加。按照上述步骤将主键表选择为course,选择对应sc中的cno的course中的cno,并点击确定。



    3.1.7点击关闭,然后保存,在出现的警告中选择是。


    3.1.8选择 数据库->SSMSTest->数据库关系图 右键单击选择新建数据库关系图,在弹窗中选择是,然后将三张表都添加,然后就可以看到三张表之间的关系了。



    3.2 通过SQL语句设置外键

    3.2.1选择 数据库->SQLTest,然后选择新建查询。注意左上角的那个框中要选中SQLTest,如果不是的话就手动选择一下。
    3.2.2在新建查询出来的界面中输入以下代码:

    --这是SQL中的注释信息,使用两个减号来注释。
    drop table sc    --删除表sc
    create table sc  --创建表sc
    (sno char(4) foreign key references student(sno),  --加外键约束
    cno char(4) foreign key references course(cno),  --加外键约束
    grade int,
    primary key(sno, cno)  --设置sno和cno的属性组为主键
    )

    3.2.3点击执行。

    3.2.4选择 数据库->SSMSTest->数据库关系图 右键单击选择新建数据库关系图,在弹窗中选择是,然后将三张表都添加,然后就可以看到三张表之间的关系了。

    4.SQL语句向已存在表设置主键和外键

    4.1 已存在表设置主键

    格式为:

    alter table 表名
    add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK__字段名'就为约束名
    primary key (字段名) --字段名同上

    如:

    alter table student
    add constraint PK_sno
    primary key (sno)

    PS:如果执行以上代码有以下警告,说明在建表的时候没有给sno添加非空约束,即需要在建表的时候使用以下代码。

    drop table student    --删除表student
    create table student  --创建表student
    (sno char(4) not null,  --加非空约束,不加"not null" 默认为:可以为空
    sname char(8),
    sage int,
    ssex char(2),
    sdept char(20)
    )

    4.2 已存在表设置外键

    格式为:

    alter table 表名
    add constraint FK_字段名--"FK"为外键的缩写
    foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'

    如:

    alter table sc add constraint FK_sno foreign key (sno) references student(sno)
    展开全文
  • 主键主键外键和索引A “key” is one of the most basic and important concepts of the Database Management System (DBMS); the keys helps us work easily with the records and the tables in our database by ...

    主键主键外键和索引

    A “key” is one of the most basic and important concepts of the Database Management System (DBMS); the keys helps us work easily with the records and the tables in our database by providing us with the ease of accessing and retrieving the data from the table. A primary key is the first key to be understood as it uniquely identifies the particular record of any table. The primary key and foreign key however, must not be confused with each other as they have a completely different definition as well as usage. Here are the differences between the two.

    “密钥”是数据库管理系统(DBMS)的最基本和最重要的概念之一; 这些键通过使我们能够轻松地访问和检索表中的数据,从而帮助我们轻松地处理数据库中的记录和表。 主键是第一个要理解的键,因为它唯一地标识任何表的特定记录。 但是,主键和外键不能相互混淆,因为它们的定义和用法完全不同。 这是两者之间的区别。

    Difference between Primary Key and Foreign Key

    Image Source

    图片来源

    主键和外键之间的区别 (Difference between Primary Key and Foreign Key)

    S.no. Primary key Foreign key
    1 The primary key of a particular table is the attribute which uniquely identifies every record and does not contain any null value. The foreign key of a particular table is simply the primary key of some other table which is used as a reference key in the second table.
    2 A primary key attribute in a table can never contain a null value. A foreign key attribute may have null values as well.
    3 Not more than one primary key is permitted in a table. A table can have one or more than one foreign key for referential purposes.
    4 Duplicity is strictly prohibited in the primary key; there cannot be any duplicate values. Duplicity is permitted in the foreign key attribute, hence duplicate values are permitted.
    5 Example:

    Consider the table student, which keeps record of students in a class:

    Here, Id is the primary key which uniquely identifies each record in the table “student”

    ID NAME Address
    101 ABC x
    102 DEF y
    103 GHI z
    104 JKL w
    Now, let us consider the table teacher, which records the teachers in the school:

    Here Tid or teacher id is the unique primary key, for each record in the table. This table uses the “ID” attribute which is the primary key of the “student” table as its reference key or foreign key to refer to the student the particular teacher teaches, :

    TID NAME TAddress ID
    1 Priya P 101
    2 Riya R 102
    3 Sam S 102
    4 Tom T 103

    Since one student is taught by more than one teachers, the ID attribute (which is the foreign key in this table), contains duplicate values.

    序号 首要的关键 外键
    1个 特定表的主键是可唯一标识每条记录且不包含任何空值的属性。 特定表的外键只是其他表的主键,在第二个表中用作参考键。
    2 表中的主键属性永远不能包含空值。 外键属性也可以具有空值。
    3 一个表中最多只能有一个主键。 一个表可以具有一个或多个外键以供参考。
    4 主键中严格禁止重复; 不能有任何重复的值。 外键属性中允许重复,因此允许重复值。
    5 例:

    考虑一下表格学生,该表格保留班级学生的记录:

    在此,Id是唯一标识表“ student”中每个记录的主键

    ID 名称 地址
    101 美国广播公司 X
    102 防御 ÿ
    103 GHI ž
    104 JKL w
    现在,让我们考虑表老师,它记录了学校中的老师:

    对于表中的每个记录,此处的Tid或Teacher ID是唯一的主键。 该表使用作为“学生”表主键的“ ID”属性作为其参考键或外键来引用特定老师所教的学生:

    工业贸易署 名称 地址 ID
    1个 普里亚 P 101
    2 里雅 [R 102
    3 山姆 小号 102
    4 汤姆 Ť 103

    由于一位学生由多位老师教,因此ID属性(此表中的外键)包含重复的值。

    The foreign key of one table although is derived from the primary key of the other table, holds completely different characteristics and these differences are crucial which should be taken care of to avoid any errors.

    一个表的外键虽然是从另一表的主键派生而来的,但它们具有完全不同的特征,这些差异至关重要,应注意避免任何错误。

    Comment below if you have queries related to primary key vs foreign key.

    如果您对主键和外键有疑问,请在下面评论。

    翻译自: https://www.thecrazyprogrammer.com/2019/04/difference-between-primary-key-and-foreign-key.html

    主键主键外键和索引

    展开全文
  • 主键主键外键和索引 Primary and foreign keys are a way in which to constrain related data together to ensure data in your database remains consistent and to ensure no redundant data is in the database...

    主键主键外键和索引

    Primary / Foreign Keys

    Primary and foreign keys are a way in which to constrain related data together to ensure data in your database remains consistent and to ensure no redundant data is in the database as a result of deleting a table or row in one table that affects data in other tables that may perhaps rely on that information. It can cause both data integrity problems as well as problems with your application that makes use of such database.

    主键和外键是一种将相关数据约束在一起的方式,以确保数据库中的数据保持一致,并确保由于删除一个表中的表或行而影响其他表中的数据,从而导致数据库中没有冗余数据也许依赖于这些信息。 它可能导致数据完整性问题,也可能导致使用此类数据库的应用程序出现问题。

    什么是主键? (What’s a primary key used for?)

    A primary key is used to ensure data in the specific column is unique. You can only set constraints with primary keys, by setting a foreign key to another column which creates a relationship with the column that has the primary key set. A prime use of a primary key is in the case of a users table. The id column is likely to be a primary key because is needs to be unique. You may also set this column to auto increment; but the most important component is the primary key.

    主键用于确保特定列中的数据唯一 。 您只可以设定主键约束,通过设置一个外键 ,它创建了一个具有主键设置的关系的另一列。 对于用户表,主键的主要用途。 id列可能是主键,因为它需要唯一。 您也可以将此列设置为自动递增。 但最重要的组成部分是主键。

    为什么需要使用主键? (Why do I need to use a primary key?)

    Well, even though the column set as a foreign key may have duplicate data in multiple rows, it is still relying on the unique information in the primary key. If there was non-unique rows in the primary key column, there would not be a use for a foreign key because you would be mapping one row in the foreign key to two rows in the primary key. In essence, primary to foreign keys ensure that:

    好的,即使设置为外键的列可能在多行中都有重复的数据,它仍然依赖于主键中的唯一信息。 如果主键列中存在不唯一的行,则不会使用外键,因为您会将外键中的一行映射到主键中的两行。 本质上,外键的主键确保:

    • the data that can be inserted in the table that has the foreign key can only be information thatuniquely exists in the primary key column.

      具有外键的表中可以插入的数据只能是主键列中唯一存在的信息。
    • if a DELETE or UPDATE occurs, the action you specified will be undertaken to ensure data integrity and prevent data redundancy in your database. Two primary actions are CASCADE and RESTRICT. CASCADE means any affected data will be deleted as well (hence, cascading), in the case of an UPDATE execution; in order to keep data consistent and prevent data redundancy.

      如果发生DELETE或UPDATE,则将执行您指定的操作以确保数据完整性并防止数据库中的数据冗余。 两个主要动作CASCADE和RESTRICT。 CASCADE表示在执行UPDATE的情况下,所有受影响的数据也将被删除(因此, 级联 ); 为了保持数据一致并防止数据冗余。

    什么是外键? (What’s a foreign key used for?)

    How do you actually ensure that data stays integral, consistent and updated? You make use of foreign keys. A primary key ensures that data is unique in one column, but the foreign key is what makes the data stay consistent, as that is where the important data lies that needs to stay consistent and integral. It’s inevitable that in most database-driven applications you create, you’ll need to have multiple tables that are for different areas of your application that makes a reference to an id or some unique data in another table. For example, a profile comments table – your application needs to understand what user id the profile comment is for. You can make use of a foreign key here that maps to the primary key that, as well as keeping data consistent, it also means that you can set the foreign key to CASCADE and any DELETE and UPDATE actions will be cascaded down to any affected row (such as the foreign key).

    您实际上如何确保数据保持完整,一致和更新? 您使用外键 。 主键可确保数据在一列中是唯一的,但是外键是使数据保持一致的原因,因为重要数据所在的位置需要保持一致和完整。 不可避免的是,在您创建的大多数数据库驱动的应用程序中,您将需要具有多个表,这些表用于应用程序的不同区域,这些表引用了另一个表中的ID或某些唯一数据。 例如, 配置文件注释表–您的应用程序需要了解配置文件注释的用户ID 。 您可以在此处使用映射到主键的外键,并使数据保持一致,这还意味着您可以将外键设置为CASCADE,并且任何DELETE和UPDATE操作将被级联到任何受影响的行(例如外键)。

    翻译自: https://www.eukhost.com/blog/webhosting/whats-the-purpose-use-primary-foreign-keys/

    主键主键外键和索引

    展开全文
  • 简要介绍了数据的主键和外键,在实践的生产中主键和外键的作用异常的重要
  • 1.1什么是主键和外键 1.2主键和外键的作用 1.3主键、外键和索引的区别 2.主键(primary key) 2.1通过SSMS设置主键 2.2通过SQL语句设置主键 3.外键(foreign key) 3.1通过SSMS设置外键 3.2通过SQL...

    1.定义

    2.主键(primary key)

    3.外键(foreign key)

    4.SQL语句向已存在表设置主键和外键

    1.定义

    1.1 什么是主键和外键

    关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
    比如:
    学生表(学号,姓名,性别,班级)
    其中每个学生的学号是唯一的,学号就是一个主键

    课程表(课程编号,课程名,学分)
    其中课程编号是唯一的,课程编号就是一个主键

    成绩表(学号,课程号,成绩)
    成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键

    成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键

    1.2 主键和外键的作用

    1.2.1为了维护关系数据库的完整性:
    主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

    外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

    1.2.2起约束作用:
    外键取值规则:空值或参照的主键值。
    (1)插入非空值时,如果主键表中没有这个值,则不能插入。
    (2)更新时,不能改为主键表中没有的值。
    (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
    (4)更新主键记录时,同样有级联更新和拒绝执行的选择。

    1.3 主键、外键和索引的区别

    区别主键外键索引
    定义 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值,但可以有一个空值
    作用 用来保证数据完整性 用来和其他表建立联系用的 是提高查询排序的速度
    个数 主键只能有一个 一个表可以有多个外键 一个表可以有多个唯一索引

    参考网站:SQL的主键和外键的作用

    2.主键(primary key)

    2.1 通过SSMS设置主键

    2.1.1打开之前建立的表,即选择 数据库->SSMSTest->表->dbo.student 右键单击dbo.student选择设计。

    2.1.2在sno处右键单击选择设置主键。

    2.1.3这时可以看到sno前面出现了一个钥匙一样的图标,这就代表着sno已经被设置为主键了。点击一下保存或者按Ctrl+S就可以保存了。
    2.1.4按照以上步骤打开dbo.course,右键单击cno选择设置主键。保存。

    2.1.5按照以上步骤打开dbo.sc,按住shift依次点击sno和cno前面的小框按钮,就可以同时选中这两行。然后再右键单击选择设置主键。保存。

    2.1.6至此,已经完成了三张表的主键设置。

    2.2 通过SQL语句设置主键

    2.2.1选择 数据库->SQLTest,点击新建查询,注意左上角的框里是SQLTest,不是的话手动选择一下。

    2.2.2在点击新建查询出来的界面中输入以下代码:

    --这是SQL中的注释信息,使用两个减号来注释。
    drop table student    --删除表student
    create table student  --创建表student
    (sno char(4) primary key,  --设置sno为主键
    sname char(8),
    sage int,
    ssex char(2),
    sdept char(20)
    )
    
    drop table course    --删除表course
    create table course  --创建表course
    (cno char(4) primary key,  --设置cno为主键
    cname char(8),
    cpno char(4),
    ccredit int
    )
    
    drop table sc    --删除表sc
    create table sc  --创建表sc
    (sno char(4),
    cno char(4),
    grade int,
    primary key(sno, cno)  --设置sno和cno的属性组为主键
    )

    2.2.3点击上面的执行,或者按F5之后出来了如下画面。

    2.2.4右键SQLTest点击刷新或者按F5,然后选择表,右键单击选择设计,能看到三张表都已经设置主键了。



    2.2.5至此,已经完成了三张表的主键设置。

    3.外键(foreign key)

    3.1 通过SSMS设置外键

    3.1.1选择 数据库->SSMSTest->表->dbo.sc 右键单击dbo.sc选择设计。

    3.1.2右键单击sno或者cno,选择关系。

    3.1.3点击左下角的添加。

    3.1.4在 表和列规范 后面的框中点一下,就会出现后面的三个点的按钮,点击三个点图标的那个按钮。

    3.1.5因为sc中的sno引用了student中的sno,所以主键表那里选择student,然后选择对应的sno。而sc中的cno因为引用的是course中的sc,所以在这里没法设置外键,需要等下再设置,在这里把它选择为无。点击确定。


    3.1.6再次点击左下角的添加。按照上述步骤将主键表选择为course,选择对应sc中的cno的course中的cno,并点击确定。



    3.1.7点击关闭,然后保存,在出现的警告中选择是。


    3.1.8选择 数据库->SSMSTest->数据库关系图 右键单击选择新建数据库关系图,在弹窗中选择是,然后将三张表都添加,然后就可以看到三张表之间的关系了。



    3.2 通过SQL语句设置外键

    3.2.1选择 数据库->SQLTest,然后选择新建查询。注意左上角的那个框中要选中SQLTest,如果不是的话就手动选择一下。
    3.2.2在新建查询出来的界面中输入以下代码:

    --这是SQL中的注释信息,使用两个减号来注释。
    drop table sc    --删除表sc
    create table sc  --创建表sc
    (sno char(4) foreign key references student(sno),  --加外键约束
    cno char(4) foreign key references course(cno),  --加外键约束
    grade int,
    primary key(sno, cno)  --设置sno和cno的属性组为主键
    )

    3.2.3点击执行。

    3.2.4选择 数据库->SSMSTest->数据库关系图 右键单击选择新建数据库关系图,在弹窗中选择是,然后将三张表都添加,然后就可以看到三张表之间的关系了。

    4.SQL语句向已存在表设置主键和外键

    4.1 已存在表设置主键

    格式为:

    alter table 表名
    add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK__字段名'就为约束名
    primary key (字段名) --字段名同上

    如:

    alter table student
    add constraint PK_sno
    primary key (sno)

    PS:如果执行以上代码有以下警告,说明在建表的时候没有给sno添加非空约束,即需要在建表的时候使用以下代码。

    drop table student    --删除表student
    create table student  --创建表student
    (sno char(4) not null,  --加非空约束,不加"not null" 默认为:可以为空
    sname char(8),
    sage int,
    ssex char(2),
    sdept char(20)
    )

    4.2 已存在表设置外键

    格式为:

    alter table 表名
    add constraint FK_字段名--"FK"为外键的缩写
    foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'

    如:

    alter table sc add constraint FK_sno foreign key (sno) references student(sno)

    转载于:https://www.cnblogs.com/feiyu-cn/p/7642193.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,891
精华内容 3,156
关键字:

主键和外键