zoukankan      html  css  js  c++  java
  • SQL-server 学习笔记(二):约束

    在表创建完成之后,就可以向表中插入数据,但是在某些情况下,我们必须保证数据是“合法”的。比如有性别一栏,性别只有“男”、“女”,一般情况下不可能出现第三种情况,所以我们需要对性别加约束。

    再比如添加身份证号,如果不是同一个人,那身份证号一定不能相同(极特殊情况除外),所以要求身份证号必须是唯一的。

    SQL语句的约束是靠关键词完成的,所以记约束,记住关键词和关键词对应的约束功能就可以。

    1、not null:这个最简单,不能为空。。

    2、primary key:主键的意思,一个表中只有一个主键,并且主键的内容在同一表中具有唯一性,比如刚才说的身份证号,或者一个学校学生的学号等,这些都是唯一的。

    3、references:与主键对应的外键。什么是外键呢?就是把其他表格里的主键拿过来,作为一个字段。

    用法:在表2中:表1的主键 references 表1名称(表1的主键)  这时候表1的主键就作为了表2中外键。

    主键只有一个,但是外键可以有多个,可以用外键和其他表产生联系,产生约束。

    比如,我建了一张河北省市名表,表中包含河北省所有的市,比如保定、沧州、廊坊等等。

    又建了另外一张学生信息表,表中有一列是生源所在地,这时可以把市名表里的“市名”一列作为学生信息表的外键。这时在插入学生信息时,生源所在地必须再市名表里有,如果没有,报错。比如某同学来自于保定,插入信息时写成了“哈尔滨”,这种情况下是插入不进去的,这就是一种约束。

    4、unique:唯一的意思。好像和刚才的primary key有冲突,其实没有。唯一的列可以有很多,但是作为主键的只能有一个。

    5、default:默认的意思。用法:default(),括号里写默认的内容。

    6:、check:设置字段的取值范围,例如大学中的课程分数,一定是0<=分数<=100的,如果输入的数据超过这个范围,说明是错的。

    Score int check(Score>=0 and Score<=100),Score是字段名称,int是数据类型,括号里边是约束内容。在sql中,and是逻辑与,C语言中用的是&&。

    在上一部分也说过了,约束条件语法上可以左右互换的,顺序不影响结果。

    比如Score int check(Score>=0 and Score<=100)not null 和Score int not null check(Score>=0 and Score<=100)是一样的。

    一般来讲,约束是在创建表时定义的,但是后期也可能随着项目的进行,也会修改或删除。

    那在后边无论是添加或删除约束吗,都属于是修改表,修改的关键词是alter、drop constraint,constraint是约束的意思,drop是删除的意思,add是添加的意思。

    添加、删除约束不要想成是insert,insert into 是在插入数据时的关键词。

    删除约束:alter table 表名 drop constraint 约束名,约束名可以对表鼠标右键,找到“check约束”,里边可以找到约束名字。约束名一般比较特殊,比较长。

    添加约束:alter table 表名 add  constraint 约束名 check(表达式)。

    其实可以看到,删除约束语法中没有具体的列名,而是针对这个表,但是添加约束中,check括号中的表达式会体现出具体的列。

    如何添加除了check约束其他的约束?

    添加not null约束:

    alter tabel 表名 add constraint not null(列名)

    添加unique约束:

    alter tabel 表名 add constraint unique(列名)

    添加primary约束:

    alter tabel 表名 add constraint primary key(列名)

    添加default约束:

    alter tabel 表名 add constraint default 默认值 for(列名)

    添加reference约束:

    alter tabel 表名 add constraint foreign key(列名) reference 表名1(列名(该表的主键))

  • 相关阅读:
    NSString的几种常用方法
    ios页面间传递参数四种方式
    ios category类别的使用
    iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
    IOS导航栏的使用方法
    报错:Expected one result (or null) to be returned by selectOne(), but found: 6
    Spring小知识
    spring动态代理
    登录和注册功能思路
    sql语句实例练习
  • 原文地址:https://www.cnblogs.com/lgwdx/p/14958915.html
Copyright © 2011-2022 走看看