数据应用达人之SQL基础教程分享4-键的约束

键的约束

5、主键约束

【知识点介绍】

在第一章的数据库里我们就提到过主键,SQL也不例外。
SQL里的主键是表里的一个或多个用于实现唯一性标记的列(字段),主键是在创建表的时候指定的。
以我们创建的Student表为例,我们将ID设置为主键:

Sql代码 
  1. CREATE TABLE Student  
  2. (  
  3. ID INT NOT NULL PRIMARY KEY,  
  4. SName VARCHAR(25) NOT NULL,  
  5. Sex VARCHAR(10),  
  6. Major VARCHAR(20),  
  7. Credit INT  
  8. );  
  9.   
  10. -- 或者  
  11.   
  12. CREATE TABLE Student  
  13. (  
  14. ID INT NOT NULL,  
  15. SName VARCHAR(25) NOT NULL,  
  16. Sex VARCHAR(10),  
  17. Major VARCHAR(20),  
  18. Credit INT,  
  19. PRIMARY KEY (ID)  
  20. );  

 


之所以那ID做为主键,说明ID可以作为唯一标识,因为每个人的ID都是不同的值。这样可以确保Student表里数据的准确性和一致性,通过ID就可以完整的表达(展示)出每一行的数据。

6、唯一性约束

【知识点介绍】

UNIQUE,即唯一性约束,要求表里的某一列的值在每一行都是唯一的,这一点和主键约束是类似的。
UNIQUE的用法和主键类似,以Student学生表为例:

Sql代码 
  1. CREATE TABLE Student  
  2. (  
  3. ID INT NOT NULL UNIQUE,  
  4. SName VARCHAR(25) NOT NULL,  
  5. Sex VARCHAR(10),  
  6. Major VARCHAR(20),  
  7. Credit INT  
  8. );  
  9.   
  10. -- 或者  
  11.   
  12. CREATE TABLE Student  
  13. (  
  14. ID INT NOT NULL,  
  15. SName VARCHAR(25) NOT NULL,  
  16. Sex VARCHAR(10),  
  17. Major VARCHAR(20),  
  18. Credit INT,  
  19. UNIQUE (ID)  
  20. );  

 

例子只是为了说明UNIQUE的用法,没有实际意义,供参考而已。

当然,主键约束和唯一性约束直接也有很多不同点:
·唯一性约束的列允许值为NULL,但主键不允许;
·唯一性约束可以设置多个列,但它们不会被当做主键使用;
·一般情况下,一个表里可以有多个唯一性约束,但只有一个主键(当然也可以有多个列或字段来组成一个组合主键);
·主键还有一个关键的作用,就是被外键引用。

所以,我们就来了解下外键吧。

7、外键约束

【知识点介绍】

什么是外键?外键实际上是基于主键才存在的,在表1中存在的主键,在表2中也存在,则它便成了表2的一个外键。

换一种描述,即一个表中的 外键FOREIGN KEY 是指向另一个表中的主键 PRIMARY KEY的,实际上有点子类继承父类的意思。

我们举例说明,假设我们还有一个表FinanceStu(金融专业学生表),它有ID、SName、Class(班级)等列,该表的ID是自身的主键,且又是对Student的外键:

Sql代码 
  1. CREATE TABLE FinanceStu  
  2. (  
  3. ID INT NOT NULL,  
  4. SName VARCHAR(25) NOT NULL,  
  5. Sex VARCHAR(10),  
  6. Class VARCHAR(10),  
  7. Credit INT,  
  8. PRIMARY KEY (ID),  
  9. FOREIGN KEY (ID) REFERENCES Student(ID)  
  10. );  

 

所以我们可以把Student看成父表,而FinanceStu则是基于Student的子表。如果我们把父表里的ID删除,则子表里的ID也会被删除,这就是之前更新表、删除表里提到的关联和约束了,这也是为什么我们一强调说,在设计表时要考虑周全的一个重要原因。

8、CHECK约束

【知识点介绍】

CHECK约束是用来规定列的取值范围的,它可以规定一个列的取值范围,也可以规定多个列的取值范围:

Sql代码 
  1. CHECK (列 规定)  
  2. -- 对一个列进行CHECK约束  
  3.   
  4. CONSTRAINT 约定名 CHECK (列1 规定,列2 规定,列3 规定)  
  5. -- 对一个或多个列进行CHECK约束  

 

例如我们要把Student表中的ID做个CHECK约束,要求它的取值不能低于20160000,Credit不能低于0(但允许是空的),我们可以这样写:

Sql代码 
  1. CREATE TABLE Student  
  2. (  
  3. ID INT NOT NULL,  
  4. SName VARCHAR(25) NOT NULL,  
  5. Sex VARCHAR(10),  
  6. Major VARCHAR(20),  
  7. Credit INT,  
  8. CONSTRAINT mycheck CHECK (ID > 20160000,Credit > 0)  
  9. );  

 

有了这样的约束之后,我们在添加修改行数据的时候,就需要遵循这个约束了。

9、小结

【知识点介绍】

我们在这几节介绍了一些操作表的SQL语句,使用CREATE TABLE用来创建新表, ALTER TABLE用来更改表列对象, 而 DROP TABLE可以用来完整地删除一个表。 
但我们要注意,这些语句我们必须小心使用,并且在使用时应该做好备份工作。
由于这些语句在不同数据库管理系统(DBMS)中语法都会有所区别,更多详细的信息大家不妨可以去查询相对应的一些DBMS文档。

另外关于键(列)的约束,约束看起来是比较简单的,但它对数据库表的完整性、关联性起着至关重要的作用。

 

下文待续。。。。。。

 

欢迎大家前往访问我们的官网:

http://www.datanew.com/datanew/homepage

http://www.lechuangzhe.com/homepage

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值