Oracle表及保证数据的完整性

Posted ComputerNotes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle表及保证数据的完整性相关的知识,希望对你有一定的参考价值。


DDL语句

数据定义语言(Data Definition Language,DDL)用于定义和维护数据库对象的结构或模式,主要包括以下语句。

(1)CREATE语句:用于创建数据库和数据库对象。

(2)ALTER语句:用于修改数据库和数据库对象的结构。

(3)DROP语句:用于删除数据对象。

(4)TRUNCATE语句:从一个表中删除所有记录,包括为表分配的所有空间。

(5)RENAME语句:重命名对象。

DDL语句是最先使用的语句,因为必须先有数据库对象才能对这些对象执行DML等操作。

常用数据类型

字符型:

   CHAR [ (size [ BYTE | CHAR])]固定长度的字节(BYTE)数据或字符(CHAR)数据,长度由size指定,数据长度小于定义长度时,末尾使用空格补齐,最大长度为2000字节,默认长度和最小长度为1字节。

      VARCHAR2( size [ BYTE | CHAR])长度可变的字节(BYTE)数据或字符(CHAR)数据,长度由size指定,最大长度为4000字节或字符,最小长度为1字节或1字符。与CHAR不同,必须为VARCHAR2指定size。

     LONG变长字符数据类型,VARCHAR2最大长度为4000字节,因此存取4000字节以上大文本时可以用此数据类型,最大为2GB,但是从Oracle 8i开始,不推荐使用LONG类型,其存在的目的是支持向后兼容,建议使用CLOB和NCLOB来替代。



       说明:

(1)关于定义CHAR和VARCHAR2类型时指定BYTE和CHAR的区别。

CHAR和VARCHAR2类型默认是以BYTE为单位的,如果显式地定义了CHAR为单位(如CHAR(1  CHAR)或VARCHAR2(1 CHAR)),则CHAR和VARCHAR2会以字符为单位,一个字符的大小从一个字节到4个字节不等,这取决于数据库使用的字符集

  

数值型

NUMBER[(precision[,scale])]变长度数值类型,可以用来存储0、正负定点或者浮点数。其中,precision指定精度,即最大的数字位数(小数点前和后的数字位数的总和),最大位数为38位;scale指定小数点右边的数字位数。


日期类型

DATE类型

DATE类型用于存储日期和时间信息,包括世纪、年、月、日、时、分、秒,最小精度为秒。格式为“DD-MON-RR”,即以日-月-年的格式显示。

 to_date、  to_char


大对象类型

BLOB:二进制大对象,主要用于存储二进制数据。这种类型用于存储大量的二进制数据,如图片、视频等。

表中的数据的完整性:如何保证数据的准确性

约束、触发器

完整性约束   

数据库的完整性,即实体完整性、参照完整性和用户自定义完整性。使用约束的目的就是保证数据的完整性,防止非法或无效数据的输入。

约束的类型

Oracle数据库共有5种约束:

(1)主键(PRIMARY KEY)约束:使用单列或多列的组合来唯一地标识表中的一行记录,实现实体完整性。主键约束同时满足唯一约束和非空约束(当主键是由多个列组成的复合主键时,复合主键中的任何一个列都不能为空值)。

特点:一个表只能有一个主键约束,主键约束列列值不能为空,不能重复。

1SQL> create table student(
2  2  s_id char(12) primary key,
3  3  s_name varchar2(20),
4  4  s_gender char(2),
5  5  s_birth date);
6表已创建。
7SQL>
  • s_id char(12) primary key  sys_C00001

  • s_id char(12) constraint aa primary key

  • s_id char(12) constraint pk_s_id primary key

(2)唯一(UNIQUE)约束:定义该约束的列的值不能相同,约束可以定义在单列或多列的组合上。( 特点:列值不能重复)

1SQL> create table student
2  2  (s_id char(12) primary key,
3  3  s_name varchar2(20) unique,
4  4  s_gender char(2),
5  5  s_birth date);
6表已创建。
7SQL>

(3)外键(FOREIGN KEY)约束:在从表和主表之间建立引用关系,实现参照完整性。(特点:外键约束列的列值来源于所引用主表的引用列的列值。外键引用列列值不能重复。

(4)非空(NOT NULL)约束:定义该约束的列上的值不能为空值。

(5)条件(CHECK)约束:为某些业务规则设定取值条件,以限制列的取值范围。

1SQL> create table student
2  2  (s_id char(12) primary key,
3  3  s_name varchar2(20) unique not null,
4  4  s_gender char(2) check(s_gender in('f','m')),
5  5  s_birth date not null);
6表已创建。
7SQL>

定义主键约束的语法格式如下:

[CONSTRAINT constraint_name] PRIMARY KEY(attribute_name,...)

定义唯一约束的语法格式:

[CONSTRANT constraint_name] UNIQUE(attribute_name,....)

定义外键约束的语法

[CONSTRANT constraint_name]  FOREIGN KEY(child_attribute,...)

REFERENCES table_name(parent_attribute,...)[NO DELETE CASCADE | ON DELETE SET NULL]

 定义非空约束的语法

[CONSTRAINT constraint_name] NOT NULL

定义条件约束的语法

[CONSTRAINT constraint_name] CHECK (condition)

表级约束和列级约束   

约束分为表级约束和列级约束两种。紧跟在列的数据类型之后定义的约束为列级约束,表级约束是在定义之前或之后进行定义的约束。它们之间没有太大的区别,然而当一个主键约束或外键约束是由多个列组成时,则必须使用表级约束定义,因为列级约束只能引用当前列,它们不能被用于多属性键。在Oracle数据库中,非空约束是唯一一种只能在列级定义的约束。

1SQL> create table score(
2  2  s_id char(12),
3  3  c_id varchar2(20) references course(c_id),----------列级约束
4  4  s_score number(4,2),
5  5  constraint pk_s_id primary key(s_id,c_id),-------------表级约束
6  6  constraint fk_id foreign key(s_id) references student(s_id)
7  7  );

Oracle表及保证数据的完整性

在定义外键约束时,注意表级约束和列级约束的区别,使用列级约束定义时,不需要使用FOREIGN KEY(...)。当一个外键约束引用了一个表的主键时,表名后的(引用列...)是可以省略的,但为了清除起见,最好写出所引用的列。


关于约束的几点说明:

(1)一个表只能定义一个主键约束,但可以定义多个唯一约束。

(2)定义外键约束的列取值只有两种可能,要么是被参照的列的值,要么是空值。因此,在定义外键约束时有两个选项ON DELETE CASEDE和ON DELETE  SET NULL,用来当被参照的列的值发生改变时对参照列的值进行相应的处理,含义分别如下:

   ON DELETE CASCADE:当主表中的被参照数据被删除时,从表中的参照数据行也被删除。

   ON DELETE SET NULL:当主表中的被参照数据被删除时,从表中的参照数据被设置为空值。

(3)外键约束所参照的列必须已经建立了主键约束或唯一约束。如果被参照列上没有定义主键约束或唯一约束,则会报错。

(4)被参照列的数据类型必须和定义外键的列的数据类型相同,但是列的名字可以不同。

(5)可以在创建表时在CREATE TABLE语句中定义约束,也可以在建表之后使用ALTER TABLE语句定义或修改约束。

Oracle表及保证数据的完整性

某大学生运动会比赛信息数据库,保存如下几个表

     运动员sporter(运动员编号 sproterid,运动员姓名 name,运动员性别 sex,所属系号 department)

     项目 item(项目编号 itemid,项目名称 itemname,项目比赛地点 location)

     成绩 grade(运动员编号 sporterid,项目编号 itemid,积分 mark)

 

要求:

  (1)定义各个表的主码和外码约束

  (2)运动员的姓名和所属系别不能为空值

  (3)积分要么为空值,要么为6,4,2,0,分别代表第一,二,三名和其他名次的积分

 1SQL> create table sporter(
2  2  sporterid number(10) primary key,
3  3  name varchar2(10not null,
4  4  sex char(2),
5  5  department varchar2(10not null
6  6  );
7表已创建。
8SQL> create table item(
9  2  itemid varchar2(10) primary key,
10  3  itemname varchar2(10not null,
11  4  location varchar2(10)
12  5  );
13表已创建。
14SQL> create table grade(
15  2  sporterid number(10) primary key,
16  3  itemid varchar2(10not null unique,
17  4  mark number(20)
18  5  check(mark=decode(mark,6,'第一',4,'第二',2,'第三',0,'其他名次'))-----没有写not null就是允许为空
19  6  );
20表已创建。


下方查看 历史文章
Oracle表及保证数据的完整性






▲向上滑动


Oracle表及保证数据的完整性

only-you-sh


更多技术分享请加我微信,我拉你进群进行交流

长按右方二维码




以上是关于Oracle表及保证数据的完整性的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库对象_约束

oracle查看所有表及各表行数

Oracle查询当前用户下的所有表及sqlplus 设置 列宽

ORACLE 如何查询被锁定表及如何解锁释放session

怎么把mysql数据库里面的表及数据 复制到oracle

ORACLE 如何查询被锁定表及如何解锁释放session