1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

[转载]T-SQL语句约束笔记

本帖由 Tameway2005-10-03 发布。版面名称:后端开发

  1. Tameway

    Tameway New Member

    注册:
    2005-09-06
    帖子:
    1,286
    赞:
    8
    数据库完整性-约 束

    1 PRIMARY KEY约束
    例如,下面的SQL语句创建一个名为student的表,其中指定student_number为主键:
    USE test
    GO
    CREATE TABLE student
    (sutdent_number int PRIMARY KEY,
    student_name char(30))
    GO
    2 FOREIGN KEY约束
    例如,下面就是一个使用FOREIGN KEY约束的例子:
    CREATE TABLE product
    (product_number int,
    student_number int
    FOREIGN KEY REFERENCES student(student_number)
    ON DELETE NO ACTION)
    GO
    3 UNIQUE约束
    例如,下面的SQL语句创建了一个test2表,其中指定了c1字段不能包含重复的值:
    USE test
    GO
    CREATE TABLE test2
    (c1 int UNIQUE,
    c2 int)
    GO
    INSERT test2 VALUES(1,100)
    GO
    如果再插入一行:
    INSERT test2 VALUES(1,200)
    4 CHECK约束
    例如,下面的SQL语句创建一个成绩(score)表,其中使用CHECK约束来限定成绩只能在0~100分之间:
    CREATE TABLE score
    (sutdent_number int,
    score int NOT NULL CHECK(score>=0 AND score <=100)
    )


    默认值
    .1 在创建表时指定默认值
    例如,下面在test数据库中创建一个datetest表,其中c2指定默认值未当前日期:
    USE test
    GO
    CREATE TABLE datetest(
    c1 int,
    c2 datetime DEFAULT (getdate())
    )
    然后插入一行数据:
    INSERT datetest(c1) VALUES(1)
    SELECT * FROM datetest
    同样,可以给bookdb数据库中的orderform表中的order_date字段加上默认值:
    USE bookdb
    GO
    ALTER TABLE orderform
    ADD
    CONSTRAINT DateDflt
    DEFAULT getdate() FOR order_date
    .2 使用默认对象
    .2.1 创建默认对象
    2.使用CREATE DEFAULT语句
    例如,使用下面的SQL语句也可以创建address_default默认对象:
    USE bookdb
    GO
    CREATE DEFAULT address_default AS '无'
    GO
    .2.2 绑定默认对象
    2.使用sp_bindefault存储过程
    例如,上面将address_default默认对象绑定到authors表的address列上的操作过程可以使用下面的SQL语句来完成:
    USE bookdb
    EXEC sp_bindefault 'address_default', 'authors.address'
    .2.4 解除默认对象的绑定
    例如,下面的SQL语句解除authors表address列上的默认值绑定:
    USE bookdb
    EXEC sp_unbindefault 'authors.address'
    .2.5 删除默认对象
    例如,下面的SQL语句判断是否存在address_default默认对象,如果存在则删除该默认对象:
    USE bookdb
    IF EXISTS (SELECT name FROM sysobjects
    WHERE name = 'address_default'
    AND type = 'D')
    DROP DEFAULT address_default
    GO
    规 则
    1 创建规则
    例如,下面的SQL语句创建一个名为score_rule的规则,限定输入的值必须在0到100之间:
    USE test
    GO
    CREATE RULE score_rule AS @score BETWEEN 0 and 100
    而下面创建的规则将输入到该规则所绑定的列中的实际值限制为只能是该规则中列出的值:
    USE test
    GO
    CREATE RULE list_rule AS @list IN ('1997', '1997', '1996')
    也可以使用LIKE来创建一个模式规则,即遵循某种格式的规则。例如,要使得该规则指定任意两个字符的后面跟一个连字符和任意多个字符(或没有字符),并以1到6之间的整数结尾,则可以使用下面的SQL语句:
    USE test
    GO
    CREATE RULE pattern_rule
    AS
    @value LIKE '__-%[1-6]'
    2 绑定规则
    例如,下面的SQL语句可以将score_rule规则绑定到score表的score列上:
    USE test
    EXEC sp_bindrule 'score_rule', 'score.score'
    3 删除规则
    例如,要解除绑定到score表的score列上的规则,可以使用下面SQL语句:
    USE test
    EXEC sp_unbindrule 'score.score'
    例如,要删除规则score_rule,可以使用下面的SQL语句:
    DROP RULE score_rule