1、如何定义外键约束?
看create table和alter table语句的帮助2、“在定义主关键字约束的表中更新列值时其它表中有与之相
关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新”,指的是级联更新和级联删除3、另外,作好了这样的外键约束后,能否使得,对一个表进行插入操作的时候,能否自动的对另一个与他有外键关系的表中相对应的列也进行插入操作?
不能,除非写插入触发器

解决方案 »

  1.   

    CREATE TABLE 
        [ database_name.[ owner ] . | owner. ] table_name 
        ( { < column_definition > 
            | column_name AS computed_column_expression 
            | < table_constraint > ::= [ CONSTRAINT constraint_name ] }            | [ { PRIMARY KEY | UNIQUE } [ ,...n ] 
        ) [ ON { filegroup | DEFAULT } ] 
    [ TEXTIMAGE_ON { filegroup | DEFAULT } ] < column_definition > ::= { column_name data_type } 
        [ COLLATE < collation_name > ] 
        [ [ DEFAULT constant_expression ] 
            | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
        ] 
        [ ROWGUIDCOL] 
        [ < column_constraint > ] [ ...n ] < column_constraint > ::= [ CONSTRAINT constraint_name ] 
        { [ NULL | NOT NULL ] 
            | [ { PRIMARY KEY | UNIQUE } 
                [ CLUSTERED | NONCLUSTERED ] 
                [ WITH FILLFACTOR = fillfactor ] 
                [ON {filegroup | DEFAULT} ] ] 
            ] 
            | [ [ FOREIGN KEY ] 
                REFERENCES ref_table [ ( ref_column ) ] 
                [ ON DELETE { CASCADE | NO ACTION } ] 
                [ ON UPDATE { CASCADE | NO ACTION } ] 
                [ NOT FOR REPLICATION ] 
            ] 
            | CHECK [ NOT FOR REPLICATION ] 
            ( logical_expression ) 
        } < table_constraint > ::= [ CONSTRAINT constraint_name ] 
        { [ { PRIMARY KEY | UNIQUE } 
            [ CLUSTERED | NONCLUSTERED ] 
            { ( column [ ASC | DESC ] [ ,...n ] ) } 
            [ WITH FILLFACTOR = fillfactor ] 
            [ ON { filegroup | DEFAULT } ] 
        ] 
        | FOREIGN KEY //这里是建立外键的语法
            [ ( column [ ,...n ] ) ] //当前表的列名
            REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] //关联表的表名和列名
            [ ON DELETE { CASCADE | NO ACTION } ] //在这里设置级联更新和级联删除
            [ ON UPDATE { CASCADE | NO ACTION } ] 
            [ NOT FOR REPLICATION ] 
        | CHECK [ NOT FOR REPLICATION ] 
            ( search_conditions ) 
        } 
    不能在插入的时候也相应插入,只有写触发器了
      

  2.   

    Create database cat
    go
    use cat
    go
    CREATE TABLE s(s# int not null primary key,s_name varchar(8) not null)
    go
    CREATE TABLE c (c# int not null primary key,c_name varchar(8) not null)
    go
    CREATE TABLE cs(c# int not null,s# int not null,cj tinyint not null default(0),
    primary key (c#,s#),foreign key(s#) references s(s#),foreign key(c#) references c(c#))
    goinsert s values(1,'saa')
    insert c values(1,'caa')--这句是对的
    insert cs values(1,1,86)--这句是错的,sql会报错,应为s表的s#列里没有2
    insert cs vlaues(2,1,45)
      

  3.   

    给你一个例子( 级联不删除, 级联更新)
    create table table1(
    id int,
    re varchar( 255),
    primary Key ( id )
    )
    create table table2
    (
    id int Foreign Key References table1( id ) On Delete No Action On Update Cascade,
    re varchar( 255 )
    )