日期:2014-05-17  浏览次数:20570 次

请问主键、外键、标识列
真的郁闷得很,SQL Server快学完了,根本没体会到主键、外键、标识列的作用,多表查询也没体会到外键的作用,也从没设置过外键


问题:

1:主键和标识列有什么区别啊?IDENTITY关键字是设置标识列吗?UNIQUE又是设置什么的?

2:下面语句,要求查询出下了订单的所有客户、订单编号、和订单金额

SELECT 客户表.姓名, 订单主表.订单编号, 订单主表.订单金额
FROM 客户表,订单主表
WHERE 客户表.客户编号 = 订单主表.客户编号
ORDER BY 姓名,订单金额  

上面是多表查询的SQL语句,那些表也都是我自己创建的,我没设置过外键,请问,它如何能体现外键的作用?


谢谢!!!1


------解决方案--------------------
上次给你解释那么多,给了我10分

--1
标识列和主键没有任何关系。
只是通常喜欢用标识列来做主键罢了

--2
IDENTITY 是设置标识列的
UNIQUE 和PRIMARY KEY 都是约束
共同点是约束强制实施列集中值的唯一性
PRIMARY KEY 不允许有nuil
外键也是约束,约束主表与从表的数据完成性。
------解决方案--------------------
为了唯一标识表中的记录,需要建立一个主键(primary key)。
主键由表中一个或多个列组成,包含一个唯一跨所有记录的值。

如果将一列标识为主键,那么数据库引擎可以确保最终不会出现有相同值的两个记录。

主键可以由单个列(例如Id数字列包含了表中每条记录的唯一数字)组成,也可以跨多个列,其中的列组合起来构成整条记录的唯一ID。

SQL Server也支持标识列。标识列是一个数字列,其值是在插入新记录时生成的。它们通常用作表的主键。
标识列可以用IDENTITY设置自动增长。

1:主键和标识列有什么区别啊?IDENTITY关键字是设置标识列吗?UNIQUE又是设置什么的?

不是一个概念,但是标识列可以作为主键。
IDENTITY是设置标识列自动增长的。
UNIQUE 是唯一约束。


2:下面语句,要求查询出下了订单的所有客户、订单编号、和订单金额
如果有外键约束的话,体现在如果这个客户已有订单,在订单存在的情况下,这个客户的信息是不能删除的。

------解决方案--------------------
主键是表中值唯一的,一般习惯把标识列作为主键使用。UNIQUE 一般用在做唯一约束和唯一索引的使用使用。

外键一般是引用另外一张表中的主键值。注意一点是 主键有可能是多列组成的复合主键(多列作为主键)。主键和外键相关联来让两个或多个表产生具有关联性。这样就可以查询到某个对象的所有属性信息了。

客户表 中最好设置一个客户编号(作为主键)、客户姓名(姓名存在重名所以用客户编号做主键而不用客户姓名做主键)
订单主表 设置订单编号(作为主键)、客户编号(作为外键,这样就可以和客户表关联了)

可以再设置一个订单明细表 设置一个自增ID(identity(1,1)),订单编号(外键也就是订单主表的主键),其他属性列(比如商品编号、商品数量、商品单价等等)

------解决方案--------------------
你还是把这几个名词的定义再读一下好了。。。。
------解决方案--------------------
多看书,少泡妞



------解决方案--------------------
楼上把主键、外键的定义介绍的很详尽。我稍微补充一下外键的应用:
外键的作用通常体现在级联查询、更新、删除中,在触发器中经常使用外键作为级联的条件。
------解决方案--------------------
探讨

引用:

主键是表中值唯一的,一般习惯把标识列作为主键使用。UNIQUE 一般用在做唯一约束和唯一索引的使用使用。

外键一般是引用另外一张表中的主键值。注意一点是 主键有可能是多列组成的复合主键(多列作为主键)。主键和外键相关联来让两个或多个表产生具有关联性。这样就可以查询到某个对象的所有属性信息了。

客户表 中最好设置一个客户编号(作为主键)、客户姓名(姓名存……

------解决方案--------------------
您不对表进行关联,也可以进行多表查询,但是这样效率会很低。
例如,给您一个极为有用处的限制条件让您查找某样东西,和让您在大范围内查找效率是有很大差距的。
------解决方案--------------------
有msdn你放着不用,让它呆在那睡觉,里面讲的这么详细怎么就不去看看呢,难道真如美女所说,来泡妞的???

http://msdn.microsoft.com/zh-cn/library/ms179610.aspx
------解决方案--------------------
PRIMARY KEY 约束
http://msdn.microsoft.com/zh-cn/library/ms191236(v=sql.90)

UNIQUE 约束
http://msdn.microsoft.com/zh-cn/library/ms191166(v=sql.90)


IDENTITY
http://msdn.microsoft.com/zh-cn/library/ms186775(v=sql.90)
------解决方案--------------------
1:主键和标识列有什么区别啊?IDENTITY关键字是设置标识列吗?UNIQUE又是设置什么的?

表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK)
UNIQUE 约束确保在非主键列中不输入重复的值.
标识列是一个数字列,其值是在插入新记录时生成的。它们通常用作表的主键。标识列不一定是主键。
标识列可以用IDENTITY设置自动增长。


------解决方案--------------------
探讨

感谢楼上几位朋友给的MSDN链接,我看了,还是有些模糊
主键、索引,唯一性约束三者到底有啥不一样啊,都是唯一性,分别用在哪些地方啊?