简述PRIMARY KEY与identity(1,1)的含义

来源:互联网 发布:高晓松和罗振宇 知乎 编辑:程序博客网 时间:2024/06/15 23:43

  PRIMARY KEY 约束

    表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。



    一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。



    当为表指定 PRIMARY KEY 约束时,Microsoft® SQL Server? 2000 通过为主键列创建唯一索引强制数据的唯一性。当在查询中使用主键时,该索引还可用来对数据进行快速访问。



    假如 PRIMARY KEY 约束定义在不止一列上,则一列中的值可以重复,但 PRIMARY KEY 约束定义中的所有列的组合的值必须唯一。



    如下图所示,titleauthor 表中的 au_id 和 title_id 列组成该表的组合 PRIMARY KEY 约束,以确保 au_id 和 title_id 的组合唯一。







    当进行联接时,PRIMARY KEY 约束将一个表与另一个表相联。例如,若要确定作者与书名的对应关系,可以使用 authors 表、titles 表和 titleauthor 表的三向联接。因为 titleauthor 包含 au_id 和 title_id 两列,对 titles 表的访问可由 titleauthor 和 titles 之间的关联进行。





    请参见



    创建和修改 PRIMARY KEY 约束



    ©1988-2000 Microsoft Corporation。保留所有权利。







    --------------







     Transact-SQL 参考



    

    IDENTITY(函数)

    只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。



    尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。



    语法

    IDENTITY ( data_type [ , seed , increment ] ) AS column_name



    参数

    data_type



    标识列的数据类型。标识列的有效数据类型可以是任何整数数据类型分类的数据类型(bit 数据类型除外),也可以是 decimal 数据类型。



    seed



    要指派给表中第一行的值。给每一个后续行指派下一个标识值,该值等于上一个 IDENTITY 值加上 increment 值。假如既没有指定 seed,也没有指定 increment,那么它们都默认为 1。



    increment



    用来添加到 seed 值以获得表中连续行的增量。



    column_name



    将插入到新表中的列的名称。



    返回类型

    返回与 data_type 相同的类型。



    注释

    因为该函数在表中创建一个列,所以必须用下列方式中的一种在选择列表中指定该列的名称:



    --(1)

    SELECT IDENTITY(int, 1,1) AS ID_Num

    INTO NewTable

    FROM OldTable



    --(2)

    SELECT ID_Num = IDENTITY(int, 1, 1)

    INTO NewTable

    FROM OldTable



    示例

    下面的示例将来自 pubs 数据库中 employee 表的所有行都插入到名为 employees 的新表。使用 IDENTITY 函数在 employees 表中从 100 而不是 1 开始编标识号。



    USE pubs

    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

          WHERE TABLE_NAME = 'employees')

       DROP TABLE employees

    GO

    EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'



    SELECT emp_id AS emp_num,

       fname AS first,

       minit AS middle,

       lname AS last,

       IDENTITY(smallint, 100, 1) AS job_num,

       job_lvl AS job_level,

       pub_id,

       hire_date

    INTO employees

    FROM employee

    GO

    USE pubs

    EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'





    请参见



    CREATE TABLE



    @@IDENTITY



    IDENTITY(属性)



    SELECT @local_variable



    使用系统函数



    ©1988-2000 Microsoft Corporation。保留所有权利。





    [code=SQL] 创建和维护数据库



    

    PRIMARY KEY 约束

    表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。



    一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。



    当为表指定 PRIMARY KEY 约束时,Microsoft® SQL Server? 2000 通过为主键列创建唯一索引强制数据的唯一性。当在查询中使用主键时,该索引还可用来对数据进行快速访问。



    假如 PRIMARY KEY 约束定义在不止一列上,则一列中的值可以重复,但 PRIMARY KEY 约束定义中的所有列的组合的值必须唯一。



    如下图所示,titleauthor 表中的 au_id 和 title_id 列组成该表的组合 PRIMARY KEY 约束,以确保 au_id 和 title_id 的组合唯一。







    当进行联接时,PRIMARY KEY 约束将一个表与另一个表相联。例如,若要确定作者与书名的对应关系,可以使用 authors 表、titles 表和 titleauthor 表的三向联接。因为 titleauthor 包含 au_id 和 title_id 两列,对 titles 表的访问可由 titleauthor 和 titles 之间的关联进行。





    请参见



    创建和修改 PRIMARY KEY 约束



    ©1988-2000 Microsoft Corporation。保留所有权利。







    --------------







     Transact-SQL 参考



    

    IDENTITY(函数)

    只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。



    尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。



    语法

    IDENTITY ( data_type [ , seed , increment ] ) AS column_name



    参数

    data_type



    标识列的数据类型。标识列的有效数据类型可以是任何整数数据类型分类的数据类型(bit 数据类型除外),也可以是 decimal 数据类型。



    seed



    要指派给表中第一行的值。给每一个后续行指派下一个标识值,该值等于上一个 IDENTITY 值加上 increment 值。假如既没有指定 seed,也没有指定 increment,那么它们都默认为 1。



    increment



    用来添加到 seed 值以获得表中连续行的增量。



    column_name



    将插入到新表中的列的名称。



    返回类型

    返回与 data_type 相同的类型。



    注释

    因为该函数在表中创建一个列,所以必须用下列方式中的一种在选择列表中指定该列的名称:



    --(1)

    SELECT IDENTITY(int, 1,1) AS ID_Num

    INTO NewTable

    FROM OldTable



    --(2)

    SELECT ID_Num = IDENTITY(int, 1, 1)

    INTO NewTable

    FROM OldTable



    示例

    下面的示例将来自 pubs 数据库中 employee 表的所有行都插入到名为 employees 的新表。使用 IDENTITY 函数在 employees 表中从 100 而不是 1 开始编标识号。



    USE pubs

    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

          WHERE TABLE_NAME = 'employees')

       DROP TABLE employees

    GO

    EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'



    SELECT emp_id AS emp_num,

       fname AS first,

       minit AS middle,

       lname AS last,

       IDENTITY(smallint, 100, 1) AS job_num,

       job_lvl AS job_level,

       pub_id,

       hire_date

    INTO employees

    FROM employee

    GO

    USE pubs

    EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'





    请参见



    CREATE TABLE



    @@IDENTITY



    IDENTITY(属性)



    SELECT @local_variable



    使用系统函数

原创粉丝点击