SQL数据库编程(三)——约束

 约束是通过限制列中数据、行中数据以及表之间数据取值从而保证数据完整性的非常有效和简便的方法。

1.主键约束(primary key)

      Primary key 约束在表中定义一个主键,唯一的标识表中的行。一个表中只能有一个主键约束。SQL server将检查列中现有的数据以确保现有数据遵从主键的规则,即无空值,无重复值。一个表中只能有一个主键,不能为空。

(1)利用SQL创建主键

      在创建表时创建主键约束

       Createtable [数据表名]

       ( 列名数据类型 [constraint约束名] primary key)

      createtableStudent

      (

          Snonchar(20)notnullconstraintPK_Snoprimarykey,--主键

          Snamenchar(10)notnull,--姓名

          Ssexnchar(4)null,      --性别

          Sageintnull,           --年龄

          Sdeptnchar(10)          --所在系

     )

(2)删除主键约束

          alter  table  表名  drop constraint   约束名

          alter table Student  dropconstraint    PK_Sno

 (3)给已存在的表添加主键

         alter  table 表名 add[constraint约束名] primary key (字段)

         altertableStudent

         add constraintPK_Snoprimarykey(Sno)


2.唯一键约束(UNIQUE)

         可使用UNIQUE约束确保非主键中不输入重复值。在允许空值的列上保证唯一性时,应使用UNIQUE约束而        不是primary key约束,不过在该列中只允许一个NULL,一个表中可以定义多个唯一性约束,但只能定义一个      主键约束。

 (1)创建唯一性约束

       create table 数据表名

       (列名数据类型  constraint 约束名 unique)

      createtableCourse

     (

         CnointnotnullconstraintPK_Conprimarykey,    --课程号不为空

         Cnamenchar(20)notnullconstraintUQ_Cnameunique,--课程名(非主键)唯一

         Ccreditintnotnull,             --学分

     )

  (2)删除唯一性束

          alter table 表名 drop constraint约束名

          例如:删除课程表中课程名的唯一键限制

          alter table Course dropconstraintUQ_Cname

  (3)给已存在的表添加唯一性束

          alter  table 表名 add[constraint约束名]  unique (字段)

          例如:将课程表中课程号设为唯一键约束

          altertableCourse

          addconstraintUQ_Cnameunique(Cname)

 

3.检查约束(CHECK)

          限制用户输入某一列的数据取值,即该列只输入一定范围的数据。

(1)创建检查约束

       create  table  表名

      (列名数据类型 constraint 约束名 check (逻辑表达式))

       例如:创建学生成绩表,将成绩限制在0到100之间

      createtableSC                                  --学生成绩表

       (

           Snonchar(20),                             --学号

           Cnoint,                                         --课程号

           Cgradenumeric(4,1constraint  CK_Cgrade check(Cgrade>= 0 and Cgrade <= 100)                                                                                                          --成绩(限制在0100之间)

       )

(2)删除检查约束

         alter table 表名 drop constraint约束名

         例如:删除成绩约束

          alter table SC dropconstraintCK_Cgrade

3)给已存在的表添加检查约束

        alter  table 表名 add[constraint约束名]  check (字段)

        例如:将成绩表中成绩设为检查约束

        altertable  SC

        add constraint  CK_Cgrade   check  (Cgrade>= 0andCgrade<= 100)

 

4.默认值约束(default)

    默认约束是指在用户未提供某些列的数据时,数据库系统为用户提供的默认值。

(1)创建默认值约束

        create  table  表名

       (列名数据类型 constraint 约束名  default  (默认值))

         例如:创建学生系别表,默认值为计算机科学与技术系

       createtable  Department

      (

             Sno  nchar(20),                                              --学号

            Depname nchar(30)   constraint DF_Depname   default ('计算机科学与技术')  --系别

       )

(2)删除默认约束

         alter table 表名 drop constraint  约束名

         例如:删除所在系别约束

         alter  table  Department  drop constraint  DF_Depname

(3)给已存在的表添加默认约束

         alter  table 表名 add[constraint约束名]  fefault (字段)  for  列名

        例如:将系别表中系别设为默认约束

        altertable   Department

        add constraint   DF_Depname   default('计算机科学与技术') f or  Depname


5.外键约束(froeign key)

       外键约束使用于加强两表之间一列或多列数据的联系。

      a.外键表的数据必须与主键表的数据一致

      b.如果主键表的数据修改(删除),那么外键的数据也跟着修改(删除)

      c.如果外键表与主键表相对应的数据,那么主键表中的数据不能修改或删除

      d.如果删除次表中的外键所在列,则主表不影响

         如果删除主表中的主键数据(作为外键使用列),如果次表中外键数据存在则不能删除

        createtableScore

        (

            课程号 int  not  null  primarykey,

             分数  int

        )

       createtable  course

         (

           学号  int not null primarykey,

           课程号 int,

            foreign key (课程号references Score(课程号)  --课程号叫做外键coure中引用Score表中的主键课程号

       )

  主表

        insert into Score(课程号,分数values(1111,50)

        insert into Score(课程号,分数values(2222,60)

        insert into Score(课程号,分数values(3333,70)

        insert into Score(课程号,分数values(4444,80)

        insert into Score(课程号,分数values(5555,90)

次表

       insert into course(学号,课程号values(2014401,1111)

       insert into course(学号,课程号values(2014404,2222)

       insert into course(学号,课程号values(2014405,4444)


(1)insert into course (学号,课程号) values (2014406,6666)
     报错,因为主表中没有课程号为6666的,course中课程号的值只能选择在主表Score中的值

(2)delete from course where 课程号 = 1111
       主表中课程号1111记录没删除,次表中数据删除

    

(3)delete from Score where 课程号= 2222

        不能删除主表中的数据,因为此表中有数据存在



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值