数据库表的约束

在设计数据库时,为了确保数据库表中数据的质量,需要考虑数据的完整性(数据的完整性是指数据的正确性和一致性)。举个例子:当你要为学生建立一个基本信息表StudentInfo时,这个表中学生的名字可以相同但是学号必须不一样,而他的年龄也得限制在一定范围内,像这样类似的“限制”有很多,如果违反了这些限制就制造了与现实不符的失真数据即破坏了数据的完整性。因为数据库不能自行判断哪些数据失真,所以需要认为添加一些约束来保证数据的完整性。

数据库中对表的约束有五种:

1.主键约束(Primary Key constraint):主键列数据唯一,并且不允许为空。

语法:Constraint 主键约束名 Primary Key [ Clustered | Nonclustered ] ( 列名1,[ 列名2,……,列名n ] )

主键是表中的一列或一组列,它们的值可以唯一地标识表中的每一行。

2.唯一约束(Unique constraint):该列数据唯一,允许为空,但只能出现一个空值(不重复性)。

语法:Constraint 约束名 Unique [ Clustered | Nonclustered ] ( 列名1,[ 列名2,…… 列名n] )

唯一性约束保证了除主键外的其他一个或一组列的数据具有唯一性,以防止在列中输入重复的值。(一个表只可以有一个主键约束,如果其它列也不希望有重复就可以使用唯一性约束。)

3.检查约束(Check constraint):范围限制、格式限制

语法:Constraint 约束名 Check [ Not For Replication ] ( 逻辑表达式 )

检查约束使指定表中一列或一组列可以接受的数据值或格式。

4.默认约束(Default constraint):

语法:Constraint 约束名 Default 约束表达式 [ For 列名 ]

为指定列定义一个默认值。在输入数据时,如果没有输入该列的值,则将该列的值设置为默认值。

5.外键约束(Foreign Key constraint):表间约束,确保数据的参照完整性

语法:Constraint 约束名 Foreign Key ( 列名1,[ 列名2,……列名n ] )     References 关联表 ( 关联列名1,[ 关联列名2,……关联列名n ] )

将当前表中的某一列或一组列关联到另一个表的主键列,可创建两个表之间的连接。当前表中的列就成为外键。外键涉及到两个表,一个主表,一个从表 ,主表中的外键是从表中的主键

下面以“学生信息”表为例,添加约束

Create table StudentInfo
(
	StudentNo int not null,
	StudentID int,
	StudentName nvarchar(50) ,
	Sex varchar(2) ,
	Score float Default(0),			--为学生的成绩设定默认值0,在没有数据输入时,系统自动分配为0.
	DepartmentNo varchar(10),

	Constraint PK_Student Primary Key (StudentNo),		 --用“学号”作主键,只要有学号就可以唯一确定一位学生
	Constraint IX_Student Unique(StudentID),		     --'为“身份证”添加唯一性约束,当输入的身份证号有重复时会自动检查出错误
	Constraint CK_Student Check (Sex In ('男','女')),	    --'检查学生的性别是否为男或女
	--'“学生信息”表与“院系”表建立外键约束,外键为学生信息表的"所属院系",从表的主键或候选键列为“院系”表的“记录编号”
	Constraint FK_Student Foreign Key(DepartmentNo) References Department(RecordNo)
)

约束的创建主要有两种,以添加主键为例:

(1)创建表的时候创建约束,即在CreateTable中定义约束

Create StudentInfo(StudentNo vchar Primary Key,……)

或者

Create StudentInfo(StudentNo vchar,……Constraint PK_Student Primary Key(StudentNo)……)

(2)是向已经创建 好的表中添加约束,即在Alter Table中创建约束

Alter Table StudentInfo add Constraint PK_Student Primary Key (StudentNo)

删除约束:对于存在外键约束的表,如果进行删除非空的外键,可能会出现错误

Alter Table StudentInfo Drop Constraint PK_Student

约束是SQL Server提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。对于数据库来说,约束也可分为列约束(Column Constraint)和表约束(Table Constraint),列约束作为列定义的一部分只作用于此列本身,表约束作为表定义的一部分可以作用于多个列。约束只是数据库对表管理的一种,这些在以前学过,但是不太会用,所以对约束先做一个小结。

数据库表的约束

时间: 2024-08-28 15:27:53

数据库表的约束的相关文章

Oracle 数据库表中已有重复数据添加唯一键(唯一约束)

Oracle 数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景. 表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引 ID CODE 1 code1 2 code2 3 code2 4 code2 5 code3 通过以上表中数据可以看出 code 是有重复数据的,此时如果我们直接添加唯一键,会报错. 通过 PL/SQL 可视化操作,或者通过 SQL 语句添加(ENABLE NOVALIDATE 的作用是约束新增数据但不会

创建基本表、数据库、列级/表级约束

3.5创建药品表,药品代码是主码,批号取值唯一 Create table medicine( Medicinecode char(10)primary key, Medicinename varchar(50), Pycode char(10), Dosagefrom char(10), standard char(15), Batchnumber char(20) unique, Productiondate date, Expirationdate date, Category char(1

MySql 数据库表之间--->>>增加约束

#1.向表emp2的id列中添加PRIMARY KEY约束(my_emp_id_pk) ALTER TABLE emp2 MODIFY COLUMN id INT PRIMARY KEY;ALTER TABLE emp2 ADD CONSTRAINT my_emp_id_pk PRIMARY KEY(id); #2. 向表dept2的id列中添加PRIMARY KEY约束(my_dept_id_pk) #3. 向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之相关联

ORM 实现数据库表的增删改查

这次通过反射技术来实现一下数据库表的增删改查对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 注:引用时约束了以下几点: 数据库表的表名与类的类名一致 数据库字段名和类字段名一致 自增字段的访问权限为private其余字段都为public 注:如果用的是MySql数据库,有提供好的MySqlhelper非MySql数据库可以参考我写好的SqlHelper SqlHelper参考位置:http://www.cnblogs.c

数据库表的创建、管理和数据操作(实验一),数据库创建

数据库表的创建.管理和数据操作(实验一),数据库创建 今天我们就以实验的形式对表的创建.管理和数据操作进行学习,上课吧. [实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识.[实验要求]:利用SQL语言进行数据库表的各种操作:1.数据库表的创建.修改和删除操作.2.向表中进行数据的插入.删除和修改操作.[实验内容]1. 利用数据定义语句在实验一创建的stu_DB库中建立学生管理系统的三个表:Student.Course.SC.2.利用INSERT.UPDATE和DELE

SQL Server建库-建表-建约束

----------------------------------------SQL Server建库-建表-建约束创建School数据库-------------------------------------- --创建School数据库之前:首先判断数据库是否存在,若存在则删除后再创建,若不存在则创建----exists关键字:括号里边能查询到数据则返回‘true’ 否则返回‘false’if exists(select * from sysdatabases where name =

数据库表设计五大范式所解决的问题

上学时学得<数据库系统概念>,一致似懂非懂,停留在定义和证明层面.最近在做项目,认真的了解了下数据库的范式问题,只有潜意识懂得了其原理和应用场合才能较快设计出合理的表. 首先,明确概念如下: 主码 也就是主键 候选码 若关系中的某一属性组的值能唯一的标识一个元组,而其任何真子集都不能再标识,则称该属性组为候选码.候选码不唯一,主码是其中一个而已. 主属性 包含在任一候选关键字中的属性称主属性 其次,也是本文重头戏,结合例子,讲一下各大范式对前者的改进和应用场景. 范式在现实中解决的问题 1.数

Java Web项目实战记录(数据库表设计)

又是忙到这个点 虽然累,但是看着自己的项目在一点一点的成长,心里满满的成就感>_< 今天上了一下午的cep(职场社交礼仪规划课程),是不是职场就像cep老师说的那么的勾心斗角呢? 所以今天并没有做了多少东西,数据库的文档已经出来了,但是不是太详细,表之间的关系并没有说的太清(数据库的设计我并没有参与) 以下是数据库的文档: --------------------------------------------------------------------------------------

SQL Server 可视化操作数据库表

一.约束分类(保证数据的完整性). A.主键约束——实体 设置主键不能为空值,具备唯一标识性,是为了防止录入错误,设置了主键,减慢了新增数据的速度,但大大提高了查询的效率.1.不重.2.不空.3.排序.4.唯一(不能出现两个主键)5.组合主键. 建主键: 1.可视化建主键.在“对象资源管理器”中选中要设置主键的表,右键点击“设计”,弹出的窗口中,右击该表设计器里列名前面的小三角--选“设置主键”即可. 2.代码建主键. primary key B.外键约束——引用 两个表,主表和从表.主表——用