定义约束

发表时间:2017-05-11 16:45:38 浏览量( 15 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、什么是约束

1、数据完整性

数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

数据完整性指存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。 数据库采用多种方法来保证数据完整性,包括约束、规则和触发器。

为了使得数据库数据能够满足商业逻辑或者企业规则, 那么可以使用约束,触发器和应用代码(过程,函数)来实现. 在这3种方法中, 约束易于维护, 并且具有最好的性能, 因此实现数据完整性应该首选约束.

2、是什么是约束?

我们常常在网上注册信息的时候,都必须要安装网站的要求填写信息,网站这样做的目的是想让保存进数据库的所有的信息都必须是符合要求的,这个要求如何实现,这就需要有一定的约束条件了。常见的约束如下:

输入的类型是否正确?——年龄必须是数字

输入的格式是否正确?——身份证号码必须是18位

是否在允许的范围内?——性别只能是”男”或者”女”

约束用于确保数据库数据满足特定的商业逻辑或者企业规则,如果定义了约束,并且数据不满足约束规则,那么DML 操作将不能成功执行。如果一张表有从属关系,约束阻止表删除。下面是数据约束的一些常见类型:

非空约束: NOT NULL。

唯一性约束: UNIQUE 。   

主键约束: PRIMARY KEY,Primary key约束用于唯一地标识表行的数据,当定义了主键约束之后, 主键约束列的列值不能重复,而且也不能为 Null。注意, 一张表最多只能有一个主键约束.

检查约束:CHECK,Check 约束用于强制列数据必须要满足的条件,check 约束既可以在列级中定义, 也可以在表级中定义。注意, check 约束允许列为 null

外键约束:FOREIGN KEY

三、建立约束

建立约束我们可以有两种方式:

1、在表创建的同时创建

2、在表创建之后创建

在列级约束或者在表级定义一个约束。这里先使用列级约束。列级约束是指:列级定义指在定义列的同时定义约束, 所有约束都可以在列级定义。

如下面这里例子:

--定义表的时候就添加约束
create table t_student
(
    --物理id
    stu_id int primary key,--主键约束  唯一性  非空
    stu_num char(4) unique not null,--唯一性  非空
    stu_name varchar2(30) not null,--非空
    --  stu_age int check(stu_age>=18 and stu_age<=40 ), -- 18岁以上 40岁以下
    stu_age int check(stu_age between 18 and 40),
    stu_gender char(2) check(stu_gender in ('男','女')) ,
    stu_state char(1) default 'A'--默认约束
);

--测试
insert into t_student(stu_id,stu_num,stu_name,stu_age,stu_gender,stu_state)
   values(1,'5301','刘德华',20,'男','A')
   
insert into t_student(stu_id,stu_num,stu_name,stu_age,stu_gender,stu_state)
   values(2,'5302','刘德华',20,'男','A')
   
      
insert into t_student(stu_id,stu_num,stu_name,stu_age,stu_gender,stu_state)
   values(3,'5303','郭富城',18,'男','A')
   
insert into t_student(stu_id,stu_num,stu_name,stu_age,stu_gender,stu_state)
   values(4,'5304','市分公司',40,'女','A')
   
insert into t_student(stu_id,stu_num,stu_name,stu_age)
   values(6,'5306','市公司',40)
   
   
 select * from   t_student