Oracle 数据库根本入门(二):深入明白表的束缚

[复制链接]
发表于 昨天 12:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在 Oracle 数据库的学习历程中,表的束缚是构建结实、正确且高效数据库的关键要素。束缚如同数据库的 “规则保卫者”,它通过对数据的限定,确保了数据的完备性和同等性,就如同交通规则保障蹊径上车辆行驶的有序性一样。对于 Java 全栈开辟者而言,熟练把握 Oracle 数据库的束缚知识,无论是在数据库计划、开辟照旧后续的维护中,都具有举足轻重的意义。接下来,让我们一同深入探索 Oracle 数据库中表的束缚天下。
目次

一、主键束缚
(一)作用
(二)设置方法
二、唯一束缚
(一)作用
(二)设置方法
三、查抄束缚
(一)作用
(二)设置方法
四、非 NULL 束缚
(一)作用
(二)设置方法
五、外键束缚
(一)作用
(二)设置方法
六、默认束缚
(一)作用
(二)设置方法
七、自增束缚
八、将来在企业工作的小本事


一、主键束缚

(一)作用


  • 非空限定:主键束缚确保了主键字段的值不能为 NULL。在数据库中,主键作为唯一标识每一条记录的关键,若答应为空,就无法正确地定位和区分差别的记录。比方在一个门生信息表中,门生 ID 作为主键,不能为空,否则将无法确定该条记录对应的具体门生。
  • 唯一性限定:主键的值在整个表中必须是唯一的,不能出现重复。这包管了每一条记录的独立性和可辨认性。继承以门生信息表为例,如果有两个门生的 ID 雷同,那么在查询和使用数据时,就会产生肴杂,无法正确获取特定门生的信息。
(二)设置方法



  • 建表时设置
  1. Create table class_info(
  2.     Id number(11)primary key,
  3.     Class_name nvarchar2(20)
  4. );
复制代码
这种方式非常直观,在创建表的同时,明白指定了Id字段为主键,实用于新建表时对主键的界说。在 Java 全栈开辟中,当计划数据库表结构与 Java 实体类对应时,这种清楚的主键界说方式有助于后续开辟中数据的正确使用和映射。比方在 Spring Boot 项目中,通过 JPA(Java Persistence API)举行数据库使用时,明白的主键界说能确保数据的长期化和查询使用的正确性。
2. 表存在时修改添加
  1. Alter table 表的表名 add constraint 约束名称 primary key(主键词);
复制代码
此中,束缚名称可以自行界说,为了便于管理和辨认,通常定名为pk_字段名的情势,比如pk_id。这种方式实用于已经创建好表,但后续必要添加主键束缚的环境。在企业项目中,大概会由于业务需求的变动,必要对已有的表添加主键束缚,此时就可以使用这种方法。


二、唯一束缚

(一)作用

唯一束缚用于限定某一列的值在表中不能重复,实用于一些具有唯一性特性的数据列,如电话号码、ID 号码、登录名等。以电话号码为例,在一个客户信息表中,每个客户的电话号码应该是唯一的,通过唯一束缚可以确保数据的正确性,制止出现重复电话号码导致的客户信息肴杂。
(二)设置方法


  • 建表时设置
  1. Create table students(
  2.     Id number(11)primary key,
  3.     Stu_no varchar(11)unique,
  4.     Stu_name nvarchar2(20)
  5. );
复制代码
在创建students表时,指定Stu_no字段具有唯一性束缚,包管每个门生的学号不会重复。
2. 表存在时添加
  1. alter table 表的表名 add constraint 约束名称 unique(唯一列);
复制代码
束缚名称通常写成uk_字段名的情势,比方:
  1. alter table students add constraint uk_stu_no unique(stu_no);
复制代码
在企业开辟中,当对已有表的数据完备性举行优化时,若发现某些字段必要具备唯一性,可以通过这种方式添加唯一束缚。在 Java 全栈开辟中,涉及到用户注册、数据录入等功能时,确保唯一束缚的正确设置可以有用制止数据辩论,进步体系的稳固性和可靠性。


三、查抄束缚

(一)作用

查抄束缚用于限定某一列的值只能是规定的值,通过设定条件来确保数据的公道性。比方在门生信息表中,门生的年事应该在一个公道的范围内,性别也应该是特定的取值。


(二)设置方法


  • 建表时设置
  1. create table students(
  2.     id number(11) primary key,
  3.     stu_no varchar(11) unique,
  4.     stu_name nvarchar2(20),
  5.     age number(3) check (age >=0 and age<= 200 ),
  6.     gender char(3) check (gender in ('男','女'))
  7. );
复制代码
在创建students表时,对age字段设置了年事范围的查抄束缚,对gender字段设置了性别取值的查抄束缚。在 Java 全栈开辟中,前端页面输入的数据在生存到数据库之前,固然会举行前端验证,但数据库层面的查抄束缚作为末了一道防线,能进一步确保数据的正确性,防止非法数据入库。

2. 表存在时添加
  1. alter table 表的表名 add constraint 约束名称 check(检查的条件);
复制代码
比方:
  1. alter table students add constraint ck_age check(age >=0 and age<= 200 );
  2. alter table students add constraint ck_gender check(gender in ('男','女') );
复制代码
在企业项目中,当业务规则发生厘革,必要对已有表的字段取值范围举行调解时,可以使用这种方式添加或修改查抄束缚。


四、非 NULL 束缚

(一)作用

非 NULL 束缚用于限定某一列必须为特定的值,即该列不能为 NULL。比方在门生信息表中,门生姓名这一列通常不能为空,由于一个没有姓名的门生记录是不完备且偶尔义的。


(二)设置方法


  • 建表时设置
  1. Create table students(
  2.     Id number(11)primary key,
  3.     Stu_no varchar(11)unique,
  4.     Stu_name nvarchar2(20) not null,
  5.     Age_number(3)check(age >=0 and age <= 200),
  6.     Gender char(3) check (gender in ('Male','Female'))
  7. );
复制代码
在创建表时,直接在Stu_name字段界说后加上not null,确保该字段不能为空。在 Java 全栈开辟中,与数据库交互时,通过这种束缚可以包管从数据库读取的数据完备性,制止因空值导致的步伐非常。
2. 表存在时修改添加
  1. Alter table 表的表名 modify 字段名称 数据类型 [约束];
复制代码
比方:
  1. Alter table students modify stu_name nvarchar2(20) not null;
复制代码
在企业开辟中,当发现已有表中的某些字段必要确保非空时,可以使用这种方式举行修改。


五、外键束缚

(一)作用

外键(Foreign Key)束缚用于限定外键列的值必须在关联的父表中真实存在,它创建了表与表之间的关联关系,确保了数据的参照完备性。比方在一个班级信息表和门生信息表中,门生信息表中的班级 ID 字段作为外键,其值必须在班级信息表的班级 ID 列中存在,如许才气包管门生与班级的正确关联。


(二)设置方法


  • 建表时设置
  1. -- 父表
  2. create table class_info(
  3.     id number(11) primary key,
  4.     class_name nvarchar2(20)
  5. );
  6. -- 子表
  7. create table students(
  8.     id number(11) primary key,
  9.     stu_no varchar(11) unique,
  10.     stu_name nvarchar2(20) not null,
  11.     age number(3) check (age >=0 and age<= 200 ),
  12.     gender char(3) check (gender in ('男','女')),
  13.     fk_class_id number(11) constraint fk_cls_cons references class_info(id)
  14. );
复制代码
在创建students子表时,界说了fk_class_id字段作为外键,并通过constraint fk_cls_cons references class_info(id)指定其关联到class_info父表的id字段。在 Java 全栈开辟中,涉及到多表关联查询和数据使用时,正确的外键束缚设置是包管数据同等性和正确性的关键。比方在 Hibernate 框架中,通过映射文件或注解来设置实体类之间的关联关系,与数据库中的外键束缚相对应,实现数据的正确长期化和查询。

2. 表存在时添加
  1. alter table 子表 add constraint 约束名称 foreign key(外键字段) references 父表(id);
复制代码

比方:
  1. alter table students add constraint fk_cls_cons foreign key(fk_class_id) references class_info(id);
复制代码
在企业项目中,当必要创建或修改表之间的关联关系时,可以使用这种方式添加外键束缚。


六、默认束缚

(一)作用

默认束缚用于限定某一列,如果用户在插入数据时没有输入该列的值,则主动添补默认值。比方在用户信息表中,初始化暗码(通常以密文情势存储)可以设置默认值,当用户注册时若未主动设置暗码,体系会使用默认暗码。


(二)设置方法


  • 建表时设置
  1. create table students(
  2.     id number(11) primary key,
  3.     stu_no varchar(11) unique,
  4.     stu_name nvarchar2(20) not null,
  5.     password char(32) default 'e10adc3949ba59abbe56e057f20f883e',
  6.     age number(3) check (age >=0 and age<= 200 ),
  7.     gender char(3) check (gender in ('男','女')),
  8.     fk_class_id number(11) constraint fk_cls_cons references class_info(id)
  9. );
复制代码
在创建students表时,为password字段设置了默认值'e10adc3949ba59abbe56e057f20f883e'。在 Java 全栈开辟中,当使用数据库使用框架举行数据插入时,默认束缚可以简化代码逻辑,制止因未设置某些字段值而导致的错误。

2. 表存在时修改添加
  1. alter table 表的表名 modify 字段名称 default 默认值;
复制代码

比方:
  1. alter table students modify password default 'e10adc3949ba59abbe56e057f20f883e';
复制代码
在企业开辟中,当业务需求发生厘革,必要修改已有表中某些字段的默认值时,可以使用这种方式。


七、自增束缚

在 Oracle 数据库中,Oracle11g 版本本身不带自增束缚,而 12C 及以上版本具备自增功能。在 Oracle11g 及之前版本中,可以通过序列(Sequence)和触发器(Trigger)来实现自增效果。在其他关系型数据库中,针对Id字段通常都直接提供自增束缚。

  • 使用序列实现自增(以 Oracle11g 为例)
  1. create sequence 序列名称 start with 起始值 increment by 步长值;
复制代码

比方创建一个从 1 开始,每次增长 1 的序列stu_seq:
  1. create sequence stu_seq start with 1 increment by 1;
复制代码

在插入数据时,使用序列的nextVal属性来获取下一个自增值:
  1. insert into 表的表名(id,字段列表) values (序列名称.nextVal,值的列表);
复制代码
比方向students表中插入数据:
  1. insert into students(id,stu_name) values (stu_seq.nextVal,'');
  2. insert into students(id,stu_name) values (stu_seq.nextVal,'');
  3. insert into students(id,stu_name) values (stu_seq.nextVal,'');
  4. insert into students(id,stu_name) values (stu_seq.nextVal,'');
  5. insert into students(id,stu_name) values (stu_seq.nextVal,'');
复制代码
在 Java 全栈开辟中,若使用低版本 Oracle 数据库,在举行数据插入使用时,必要在 Java 代码中共同数据库的序列来天生自增 ID,确保数据插入的正确性。比方在 MyBatis 框架中,可以通过编写 SQL 语句来调用序列天生自增 ID 并插入数据。


八、将来在企业工作的小本事


  • 束缚计划与业务需求精密团结:在企业项目中,数据库表的束缚计划要深入明白业务需求。比方在电商体系中,订单表的外键束缚要与商品表、用户表等精密关联,确保订单中的商品 ID 和用户 ID 的有用性,同时主键束缚要包管每个订单的唯一性。在计划阶段,与业务团队充实沟通,明白数据的完备性要求,制止因束缚不公道导致的数据错误和业务逻辑杂乱。
  • 束缚的维护与优化:随着业务的发展,数据库表结构和数据量大概会发生厘革,此时必要对束缚举行维护和优化。比方当数据量增大时,某些唯一束缚大概会影响插入性能,可以思量使用索引来优化。定期查抄束缚的有用性,尤其是外键束缚,确保关联表之间的数据同等性。在 Java 全栈开辟中,当数据库表结构发生厘革时,相应的 Java 实体类和数据库使用代码也必要同步调解,以包管与数据库束缚的同等性。
  • 束缚与数据安全:束缚不但包管数据的完备性,也与数据安全密切相干。比方非 NULL 束缚可以防止关键数据缺失,制止因数据不完备导致的安全弊端。在企业中,涉及用户敏感信息的表,如用户暗码字段,通过默认束缚设置强暗码战略的默认值,能进步体系的安全性。同时,在举行数据库使用时,要确保代码遵照数据库的束缚规则,防止非法数据的写入。

通过对 Oracle 数据库表的束缚的学习,我们进一步提升了数据库计划和管理的本事。在后续的学习中,我们将继承探索 Oracle 数据库的更多高级特性,为成为良好的 Java 全栈开辟者积累更丰富的知识。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表