1、表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。 比如说一个成绩系统,有学号,有课程号,有成绩,那么只有学号和课程号都确定了,那么这时成绩的唯一性就被确定了,因为一般来说一个学生的一门课程的成绩是唯一的,这样,学号和课程好就是这个成绩的主键,成绩就是外键。
2、外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键
3、级联的问题,很多初学者都很喜欢(即便是一些有一点经验的数据库管理员)都很喜欢用级联的关系,而且Microsoft在它的产品Access和sql server里都很容易实现,但是我必须警告设计者,这是一种非常危险的做法,尤其在删除的时候,很容易破坏数据库的完整性。为了删除数据而冒着破坏数据完整性的做法是不值得的。事实上数据量的大小往往并不是影响查询速度的主要原因,主要原因是查询的算法,有经验的数据库设计者很少删除数据,而是给要删除的数据做一个标记,真正要物理删除也不可能交给级联去处理。因此,再次警告数据库的使用者,慎用级联关系。
4、SQL中主键和外键的区别?
主键: 能够唯一表示数据表中的每个记录的【字段】或者【字段】的组合就称为主码(主键)。 一个主键是唯一识别一个表的每一记录,但这只是其作用的一部分,主键的主要作用是将记录和存放在其他表中的数据进行关联。在这一点上,主键是不同表中各记录之间的简单指针。主键约束就是确定表中的每一条记录。主键不能是空值。唯一约束是用于指定一个或多个列的组合值具有惟一性,以防止在列中输入重复的值。所以,主键的值对用户而言是没有什么意义,并且和它要赋予的值也没有什么特别的联系。
外键: 若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键。外键约束主要用来维护两个表之间数据的一致性。
5、SQL定义联合主键
主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的。建立主键有两种方法:一种是在数据库提供的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
5、ON DELECT CASCADE ON UPDATE CASCADE
数据库操作时候我们有时候需要这样的操作:
当我们删除主表的一条记录的时候想把从表的相关记录也一块删除,我们就要在建立这个表的时候用到ON DELETE CASCADE或ON 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中我们也可以用企业管理器来修改已经建立的表的级联操作
步骤如下:
一、我们先打开设计表界面
二、选管理关系
三、在外键管理界面的最下面有两个选项勾上即可,这两个选项分别是“级联更新相关的字段”和“级联删除相关的字段”这样我们就可以在修改主表的键的时候从表中的外键也随之修改,删除主表这个键的时候从表中的外键相对应的记录随之删除。