主键与外键的问题

 

1、表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义   PRIMARY   KEY   约束来创建主键。  比如说一个成绩系统,有学号,有课程号,有成绩,那么只有学号和课程号都确定了,那么这时成绩的唯一性就被确定了,因为一般来说一个学生的一门课程的成绩是唯一的,这样,学号和课程好就是这个成绩的主键,成绩就是外键。
 2
、外键   (FK)   是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键

 3、级联的问题,很多初学者都很喜欢(即便是一些有一点经验的数据库管理员)都很喜欢用级联的关系,而且Microsoft在它的产品Accesssql   server里都很容易实现,但是我必须警告设计者,这是一种非常危险的做法,尤其在删除的时候,很容易破坏数据库的完整性。为了删除数据而冒着破坏数据完整性的做法是不值得的。事实上数据量的大小往往并不是影响查询速度的主要原因,主要原因是查询的算法,有经验的数据库设计者很少删除数据,而是给要删除的数据做一个标记,真正要物理删除也不可能交给级联去处理。因此,再次警告数据库的使用者,慎用级联关系。

4SQL中主键和外键的区别?

主键: 能够唯一表示数据表中的每个记录的【字段】或者【字段】的组合就称为主码(主键) 一个主键是唯一识别一个表的每一记录,但这只是其作用的一部分,主键的主要作用是将记录和存放在其他表中的数据进行关联。在这一点上,主键是不同表中各记录之间的简单指针。主键约束就是确定表中的每一条记录。主键不能是空值。唯一约束是用于指定一个或多个列的组合值具有惟一性,以防止在列中输入重复的值。所以,主键的值对用户而言是没有什么意义,并且和它要赋予的值也没有什么特别的联系。
外键: 若有两个表ABCA的主键,而B中也有C字段,则C就是表B的外键。外键约束主要用来维护两个表之间数据的一致性。

5SQL定义联合主键
主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的。建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。
.在数据库提供的GUI环境中建立(以SQL7为例)。输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。
.通过SQL语句执行建立。又分两种,一是在建表语句中直接写,二是建表之后更改表结构。
在建表语句中直接写:
Create Table
表名 (字段名1 Int Not Null,字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),字段名3…… 字段名N……)
建表之后更改表结构:

 CREATE TABLE 表名 (字段名1 Int Not Null,字段名2 nvarchar(13) Not Null字段名3……字段名N……)
    GO
ALTER TABLE
表名
WITH NOCHECK ADD
CONSTRAINT [PK_
表名
] PRIMARY KEY NONCLUSTERED
     (
          [
字段名
1],
          [
字段名
2]
     )    GO

5ON   DELECT   CASCADE   ON   UPDATE   CASCADE  

数据库操作时候我们有时候需要这样的操作:

当我们删除主表的一条记录的时候想把从表的相关记录也一块删除,我们就要在建立这个表的时候用到ON DELETE CASCADEON UPDATE CASCADE

例如:

create table test2

(

    id number(7) not null,

    commects varchar(400),

    constraint fk_test2 foreign key (id) references test (id) on delete cascade

);

SQL Server中我们也可以用企业管理器来修改已经建立的表的级联操作

步骤如下:

一、我们先打开设计表界面

二、选管理关系

三、在外键管理界面的最下面有两个选项勾上即可,这两个选项分别是“级联更新相关的字段”和“级联删除相关的字段”这样我们就可以在修改主表的键的时候从表中的外键也随之修改,删除主表这个键的时候从表中的外键相对应的记录随之删除。

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值