浙江24小时

首页 > 正文

java入门基础学习提升解惑篇(5):定义约束

www.kunenaspanish.com2019-09-11

19.2定义约束

定义约束

一、什么是约束

1、数据完整性

数据完整性是指数据的准确性和可靠性。建议防止数据库中存在语义不一致的数据以及由错误信息的输入和输出引起的无效操作或错误信息。

数据完整性是指存储

数据库中的所有数据值都处于正确的状态。如果数据库中存储了不正确的数据值,则称数据库丢失了数据完整性。数据库使用各种方法来确保数据完整性,包括约束,规则和触发器。

为了使数据库数据满足业务逻辑或企业规则,可以使用约束,触发器和应用程序代码(进程,函数)。在这三种方法中,约束易于维护并具有最佳性能,因此应首先限制数据完整性。

2、是什么是约束?

当我们在互联网上注册信息时,我们必须安装网站的要求来填写信息。该网站的目的是使存储在数据库中的所有信息都符合要求。如何实现这一要求需要一定的约束。常见的约束如下:

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

输入格式是否正确? ID号必须是18位

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

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

非空约束:NOT NULL。

唯一性约束:UNIQUE。

主键约束:PRIMARY KEY,主键约束用于唯一标识表行的数据。定义主键约束后,主键约束列的列值不能重复,也不能为空。请注意,表最多只能有一个主键约束。

检查约束:CHECK,检查约束用于强制列数据必须满足的条件。可以在列级别或表级别定义检查约束。请注意,检查约束允许列为空

外键约束:FOREIGN KEY

三、建立约束

有两种方法可以创建约束:

1.在创建表的同时创建

2.创建表后创建

在列级别或表级别定义约束。这里我们首先使用列级约束。列级约束意味着列级定义是指在定义列时定义约束,并且所有约束都可以在列级别定义。

如下所示:

- 在定义表时添加约束

创建表t_student

- 物理身份

Stu_id int主键, - 主键约束唯一性非空

stu num char(4)unique不为空,--unique不为空

stu_name varchar2(30)不为空,--不为空

-stu-age int check(stu-age>;=18和stu-age<;=40)-18岁以上40岁以下

stu-age int check(stu-age介于18到40岁之间),

stu_gender char(2)check(stu_gender in('male','male'),)

stu_state char(1)default'a'默认约束

);

--测试

插入t_student(stu_id,stu_num,stu-name,stu-age,stu-gender,stu-state)

值(1,'5301'、'Andy Lau'、20,'Male'、'A')

插入t_student(stu_id,stu_num,stu-name,stu-age,stu-gender,stu-state)

值(2,'5302'、'Andy Lau'、20,'Male'、'A')

插入t_student(stu_id,stu_num,stu-name,stu-age,stu-gender,stu-state)

价值观(3,'5303','Aaron Kwok',18,'男','A')

插入t_student(stu_id,stu_num,stu_name,stu_age,stu_gender,stu_state)

价值观(4,'5304','城市分支',40,'女性','A')

插入t_student(stu_id,stu_num,stu_name,stu_age)

价值观(6,'5306','城市公司',40)

从t_student

中选择*

约束操作

一、表级约束

表级约束是在定义所有列之后定义的约束。但请注意,非空约束(非空)只能在列级别定义,而不能在表级别定义。

例如:

创建表t_student

- 物理身份

Stu_id int,

Stu_num char(4)not null,

Stu_name varchar2(30)not null, - not empty

Stu_age int,

Stu_gender char(2),

Stu_state char(1),

- 第二种方式

约束约束名称约束

约束PK_stu_id主键(stu_id),

约束UQ_stu_num唯一(stu_num),

约束CK_stu_gender检查(stu_gender in('male','female'))

);

二、维护约束

除了在定义表时定义约束,我们还可以通过修改约束来定义约束。这是最推荐的方式,尽管编写起来很麻烦。但是您可以更好地维护表结构和约束。

我们可以使用alter table语句来增加约束。如果不再需要约束,则还可以使用alter table语句删除约束。此外,用户还可以使用alter table语句修改约束名称,禁止和激活约束,维护约束来自表所有者。完成。

例如:

--Format:alter table table_name add constraint constraint name constraint

- 添加约束

更改表t_student添加约束PK_stu_id主键(stu_id);

更改表t_student添加约束UQ_stu_num unique(stu_num,stu_name); - 联合唯一

更改表t_student添加约束CK_stu_gender检查(stu_gender in('male','female'));

- 删除约束

更改表t_student丢弃约束UQ_stu_num

- 禁用约束

更改表t_student修改约束CK_stu_gender disable;

- 启动约束

更改表t_student修改约束CK_stu_gender enable;

外键约束

一、外键约束

外键约束用于定义主表和从表之间的关系。外键约束在从表上定义,但主表必须具有主键约束或唯一约束。定义外键约束时,必须要求外键列的数据。存在于主表的主键列(或唯一键)中,或Null。

数据库中的表和表不是独立的,它们是相关的。我们的生活展示中有很多例子。学生表和班级表之间的关系是每个学生必须属于一个班级,这意味着在添加学生之前必须有班级。另外,例如,部门表和工作列表,每个职位也必须属于某个部门,依此类推。

下面我们创建一个department表和一个position表,因为position表的数据必须引用department表,所以我们将position表称为slave表,department表称为master表。例如:

1.定义部门和工作清单

- 部门图表

创建表部门

Dep_id int主键,

Dep_name VARCHAR2(100)not null

- 工作清单

创建表格帖子

Post_id int主键,

Post_name VARCHAR2(100),

- 部门

Dep_id int ,

2.定义外键约束。 FOREIGN KEY:在表约束级别定义子表中的列。参考:标识父表中的表和列。

更改表格帖子删除约束FK_dep_id

- 外键约束 - 约束名外键(外键)引用主表(主键)

更改表格后添加约束FK_dep_id外键(dep_id)引用部门(dep_id)

3.首先将三个数据添加到Department表

插入部门(dep_id,dep_name)值(1,'IT部门');

插入部门(dep_id,dep_name)值(2,'管理');

插入部门(dep_id,dep_name)值(3,'清扫部门');

4,尝试将数据添加到位置表,此时位置表的外键值必须是已存在的department表。

- 其他成功

插入post(post_id,post_name,dep_id)值(1,'DBA',1)

插入post(post_id,post_name,dep_id)值(2,'java programmer',3);

插入post(post_id,post_name,dep_id)值(3,'项目经理',3);

- 添加失败

插入post(post_id,post_name,dep_id)值(3,'项目负责人',4);

二、CASCADE级联特性

CASCADE是级联操作。通常,只有主表更改,以及如何更改从表。

ON DELETE CASCADE:删除父表中的行时,也会删除依赖于子表的行。

nON DELETE SET NULL:将依赖的外键值转换为空值

例如:

- 首先删除原始约束

更改表格帖子删除约束FK_dep_id

- 重新定义外键约束

更改表格后添加约束FK_dep_id外键(dep_id)引用部门(dep_id)

在删除设置为null

尝试删除主表的主键为3的语句,并将表的外键值3更改为空值。

热门浏览
热门排行榜
热门标签
日期归档