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(列名(该表的主键))