真的郁闷得很,SQL Server快学完了,根本没体会到主键、外键、标识列的作用,多表查询也没体会到外键的作用,也从没设置过外键
问题:1:主键和标识列有什么区别啊?IDENTITY关键字是设置标识列吗?UNIQUE又是设置什么的?2:下面语句,要求查询出下了订单的所有客户、订单编号、和订单金额SELECT 客户表.姓名, 订单主表.订单编号, 订单主表.订单金额   
FROM 客户表,订单主表   
WHERE 客户表.客户编号 = 订单主表.客户编号   
ORDER BY 姓名,订单金额
    上面是多表查询的SQL语句,那些表也都是我自己创建的,我没设置过外键,请问,它如何能体现外键的作用?
谢谢!!!1

解决方案 »

  1.   

    上次给你解释那么多,给了我10分--1
    标识列和主键没有任何关系。
    只是通常喜欢用标识列来做主键罢了--2
    IDENTITY 是设置标识列的
    UNIQUE 和PRIMARY KEY  都是约束
    共同点是约束强制实施列集中值的唯一性
    PRIMARY KEY 不允许有nuil
    外键也是约束,约束主表与从表的数据完成性。
      

  2.   

    为了唯一标识表中的记录,需要建立一个主键(primary key)。
    主键由表中一个或多个列组成,包含一个唯一跨所有记录的值。如果将一列标识为主键,那么数据库引擎可以确保最终不会出现有相同值的两个记录。主键可以由单个列(例如Id数字列包含了表中每条记录的唯一数字)组成,也可以跨多个列,其中的列组合起来构成整条记录的唯一ID。SQL Server也支持标识列。标识列是一个数字列,其值是在插入新记录时生成的。它们通常用作表的主键。
    标识列可以用IDENTITY设置自动增长。1:主键和标识列有什么区别啊?IDENTITY关键字是设置标识列吗?UNIQUE又是设置什么的?不是一个概念,但是标识列可以作为主键。
    IDENTITY是设置标识列自动增长的。
    UNIQUE 是唯一约束。
    2:下面语句,要求查询出下了订单的所有客户、订单编号、和订单金额
    如果有外键约束的话,体现在如果这个客户已有订单,在订单存在的情况下,这个客户的信息是不能删除的。
      

  3.   

    主键是表中值唯一的,一般习惯把标识列作为主键使用。UNIQUE 一般用在做唯一约束和唯一索引的使用使用。外键一般是引用另外一张表中的主键值。注意一点是 主键有可能是多列组成的复合主键(多列作为主键)。主键和外键相关联来让两个或多个表产生具有关联性。这样就可以查询到某个对象的所有属性信息了。客户表 中最好设置一个客户编号(作为主键)、客户姓名(姓名存在重名所以用客户编号做主键而不用客户姓名做主键)
    订单主表 设置订单编号(作为主键)、客户编号(作为外键,这样就可以和客户表关联了)可以再设置一个订单明细表 设置一个自增ID(identity(1,1)),订单编号(外键也就是订单主表的主键),其他属性列(比如商品编号、商品数量、商品单价等等)
      

  4.   

    有msdn你放着不用,让它呆在那睡觉,里面讲的这么详细怎么就不去看看呢,难道真如美女所说,来泡妞的???http://msdn.microsoft.com/zh-cn/library/ms179610.aspx
      

  5.   


    其实泡个精通SQL的妞也能很好的解决问题滴。
      

  6.   

    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)
      

  7.   

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

  8.   

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