zoukankan      html  css  js  c++  java
  • 数据库表外键设置

    http://blog.csdn.net/pplsunny/article/details/7747340

    我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。当然,其它字段可以辅助我们在执行这些操作时消除共享冲突,不过就不在这里讨论了。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。所以数据库在设计时,主键起到了很重要的作用。

    常见的数据库主键选取方式有:

    • 自动增长字段
    • 手动增长字段
    • UniqueIdentifier
    • “COMB(Combine)”类型

     外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

     

    详细例子:

         创建来年各个简单的表:Author表和Detail表

    Sql语句如下:

    create table Author
    (
    idint identity(1,1) primary key not null,
    namevarchar(50)
    )

    create table Detail
    (
    idint identity(1,1) primary key not null,
    author_id      int,

            detail            varchar(50)
    )

    --添加外键约束语法注释:alter table 表名 add constraint 约束名 foreign key (引用外键列名) references 外键表(外键列)

    可视化的操作方法:

      table->选中表->design->选中需要设置外键的字段->选择“关系”->选择"添加"->在表和列规范处选择右边省略号(见图一)->再选择相应关系(见图二)。

    如图:

    图一:

     


     

     

    图二:

     

     


     

    备注:

    1.。。外键和主键的字段的数据类型必须相同。

    2.。。在删除表的时候要先删除外键表才能删除主键表

    3.。。图二中主键表选择要设置外键字段参照的表(即主键表的一个主键是将要设计的外键),外键表就是要添加外键的表。

     

    下面提供一个网上搜集的综合实例.

    --创建数据库
    USE master
    GO
    IF EXISTS(SELECT * FROM sysdatabases WHERE NAME='study')
    DROP DATABASE study
    GO

    CREATE DATABASE study
    ON
    ( NAME = study_dat,
       FILENAME = 'c:/study/study_data.mdf',
       SIZE = 5MB,
       MAXSIZE = 25MB,
       FILEGROWTH = 5MB )
    LOG ON
    ( NAME = 'study_log',
       FILENAME = 'c:/study/study_log.ldf',
       SIZE = 5MB,
       MAXSIZE = 25MB,
       FILEGROWTH = 5MB )
    GO

    --打开库
    use study

    --创建表

    IF EXISTS(SELECT * FROM sysobjects WHERE NAME='Stu_PkFk_S')
    DROP TABLE Stu_PkFk_S
    GO
    create table Stu_PkFk_S
    (
    sno char(6),
    sname char(10),
    age int,
    sex char(2),
    constraint PK_S primary key (sno),   --主键
    constraint CK_age check(age>=0 and age<=150)  --约束
    )

    create table Stu_PkFk_C
    (
    cno char(8),
    cname char(16),
    credit int,
    constraint PK_C primary key (cno), --主键
    constraint CK_credit check (credit>=0)  --约束
    )

    create table Stu_PkFk_SC
    (
    sno char(6),
    cno char (8),
    constraint PK_SC primary key (sno,cno),
    constraint FK_s foreign key (sno) references Stu_PkFk_S(sno), --外键
    constraint FK_c foreign key (cno) references Stu_PkFk_C(cno)
    )

    --测试数据
    insert into Stu_PkFk_S values ('001','zhang',19,'男')

    insert into Stu_PkFk_S values('002','li',16,'女')

    insert into Stu_PkFk_C values('001','li',100)

    insert into Stu_PkFk_SC values('002','001')

    select * from Stu_PkFk_S
    select * from Stu_PkFk_C
    select * from Stu_PkFk_SC

    DELETE FROM Stu_PkFk_S
    DELETE FROM Stu_PkFk_SC

     
    --测试添加删除外键
    --添加外键约束语法注释:alter table 表名 add constraint 约束名 foreign key (引用外键列名) references 外键表(外键列)

    --删除外键
    alter table Stu_PkFk_Sc drop constraint  FK_s
    alter table Stu_PkFk_SC drop constraint  FK_c

    --添加外键
    alter table Stu_PkFk_Sc
            add constraint Fk_s
            foreign key (sno)
            references Stu_PkFk_S(sno)
    go

    alter table Stu_PkFk_SC
            add constraint Fk_c
            foreign key (cno)
            references Stu_PkFk_C(cno)
    go

     

    --测试添加删除主键

     --删除主键
    alter table Stu_PkFk_S drop constraint PK_S  
    go  

    --增加主键
    alter table Stu_PkFk_S add constraint  PK_S primary key (sno)  
    go

  • 相关阅读:
    jquery easy ui 1.3.4 窗口,对话框,提示框(5)
    jquery easy ui 1.3.4 布局layout(4)
    4.1 avd
    android sdk 安装排错
    推荐一个非常COOL的开源相册程序!
    JQuery LazyLoad实现图片延迟加载-探究
    Js和asp.net各自设置的cookie相互读取的方法
    js html5推送 实例
    给网页添加[回到顶部]和[去底部]功能
    Session赋值(备注)
  • 原文地址:https://www.cnblogs.com/shuiyun/p/2758432.html
Copyright © 2011-2022 走看看