Oracle 学习(二)数据字典、表空间和约束

您所在的位置:网站首页 数据库字典表基本构成 Oracle 学习(二)数据字典、表空间和约束

Oracle 学习(二)数据字典、表空间和约束

2023-10-08 16:10| 来源: 网络整理| 查看: 265

一、学习目标 数据字典表空间约束 二、数据字典

定义:数据字典是oracle数据库中最重要的组成部分,记录了数据库的系统信息,它是只读表和视图的集合,数据字典的所有者为sys用户;用户只能在数据字典上执行查询操作,而其维护和修改是由系统自动完成的!

概念: 数据库是数据的集合, 数据库维护和管理着用户的数据,那么这些用户数据表都存在哪里,用户的信息是怎样的,存储这些用户的数据的路径在哪里,这些信息不属于用户的信息,却是数据库维护和管理用户数据的核心,这些信息就是数据库的数据字典来维护的,数据库的数据字典就汇集了这些数据库运行所需要的基础信息。每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统schema里来展示的。

Oracle的数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。

Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。

数据字典表和用户创建的表没有什么区别,不过数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据而已,为了方便的区别这些表,数据字典表的名字都是用"$"结尾,在我们看到的sql语句里看到"$"结尾的这些表,大家就可以想到这可能是一个数据字典表了,同样,既然如此,我们创 建自己的用户表的时候就不要用“$”结尾,以免让别人误会,数据字典表是系统存放系统用户的,所以他的owner是sys,在手工用create database的命令的时候,会调用$ORACLE_HOME/rdbms/admin/sql.bsq文件,这个就会执行生成我们这些数据字典表。打 开sql.bsq会发现很多数据字典几乎都以$结尾,比如col$,tab$等。

数据字典的组成:

包括数据字典基表和数据字典视图 ,其中基表存储数据库的基本信息,普通用户不能直接访问数据字典的基表,数据字典视图是基于数据字典基表所建立的视图,普通用户可以通过查询数据字典视图取得系统信息。数据字典视图主要包括user_xxx、all_xxx、dba_xxx三种类型:

1)user_tables:用于显示当前用户所拥有的所有表,它只返回用户所对应方案的所有表

比如:select table_name from user_tables;

2)all_tables:用于显示当前用户可以访问的所有表,它不仅会返回当前用户方案的所有表,还会返回当前用户可以访问的其他方案的表

如:select table_name from all_tables;

3)dba_tables:它会显示所有方案拥有的数据库表,但是查询这种数据库字典视图,要求用户必须是dba角色或是有select any table的系统权限

如:select table_name from dba_tables;

在建立用户时,oracle会把用户的信息存放到数据字典中,当给用户授予或是角色时,oracle会将权限和角色的信息存放到数据字典中;

a)通过查询dba_users可以显示所有数据库用户的详细信息;

b)通过查询数据字典视图dba_sys_privs,可以显示用户具有的系统权限

c)通过查询数据字典视图dba_tab_privs可以显示用户具有的对象权限

d)通过查询数据字典dba_col_privs可以显示用户具有的列权限

e)通过查询数据库字典视图dba_role_privs可以显示用户所具有的角色下面将一些重要的查询句:

1)查询oracle中所有的角色,一般是dba用户登录下;

如:select * from dba_roles;

2)查询oracle中所有的系统权限,一般是dba用户登录下;

如:select * from system_privilege_map order by name;

3)查询oracle中所有的对象权限,一般是dba用户登录下;

如:select distinct privilege from dba_tab_privs;

4)查询数据库的表空间

如:select tablespace_name from dba_tablespaces;

select * from dba_roles;

查看数据字典:

数据字典:dba_tablespaces、dba_users(管理用户查看的)。user_tablespaces、user_users(普通用户查看的)

eg: desc dba_tablespaces;

desc(describe)用来描述指定表名的表结构 desc(descend)用于order by 后降序

三、表空间

SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。

表空间概述:

在数据库系统中,存储空间是较为重要的资源,合理利用空间,不但能节省空间,还可以提高系统的效率和工作性能。 Oracle 可以存放海量数据,所有数据都在数据文件中存储。而数据文件大小受操作系统限制,并且过大的数据文件对数据的存取性能影响非常大。同时Oracle 是跨平台的数据库, Oracle 数据可以轻松的在不同平台上移植,那么如何才能提供统一存取格式的大容量呢? Oracle 采用表空间来解决。

表空间只是一个逻辑概念,若干操作系统文件(文件可以不是很大)可以组成一个表空间。表空间统一管理空间中的数据文件,一个数据文件只能属于一个表空间。一个数据库空间由若干个表空间组成。如图所示: 在这里插入图片描述 表空间分类: 永久表空间(数据库中要永久化存储的一些对象,比如表,视图,存储过程)、临时表空间(数据库操作当中中间执行的一些过程,当执行结束之后就释放掉)、UNDO表空间(保存事务修改前的旧址)

创建表空间:

Linux版本创建表空间

--创建表空间 linux centos6.9 --创建一个表空间,包含两个数据文件大小分别是 10MB, 5MB,要求 extent 的大小统一为 1M CREATE TABLESPACE nod_tablespace DATAFILE '/home/oracle/tablespace/A.ORA' SIZE 10M, '/home/oracle/tablespace/B.ORA' SIZE 5M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M

在这里插入图片描述 windows版本创建表空间

在这里插入图片描述 请注意:只有管理员才可以增加表空间

当表空间不足的时候可以用alter tablespace命令向表空间中追加数据文件并扩充表空间

修改表空间大小:

--扩充表空间 ALTER TABLESPACE nod_tablespace ADD DATAFILE '/home/oracle/tablespace/C.ORA' SIZE 100M

查看表空间情况:

SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name FROM dba_free_space GROUP BY tablespace_name;

创建用户时可以为用户指定某一表空间,那么该用户下所有数据库对象默认都存储在该空间中

指定用户的表空间为

create user nod identified by nod default tablespace nod_tablespace;

在这里插入图片描述

在这里插入图片描述 创建表指定表空间:

create table t2(id int) tablespace nod_tablespace

表和索引一旦创建,表空间无法进行二次修改

表空间进阶学习(数据表和数据表空间区别)

四、约束

定义: 约束是ORACLE提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。

分类: a.列级约束:列级约束必须在列的定义后面 b.表级约束:表级约束不与列一起,而是单独定义的

完整性约束的基本语法格式: [CONSTRAINT constraint_name(约束名)]、 说明:约束不指定名称时,系统会给定一个名称。

主键约束(primary key constraint)

用于定义基本表的主键,它是唯一确定表中每一条记录的标识符,其值不能为null也不能重复,以此来保证实体的完整性。表中主键只能有一个,但可以由多个列构成。

a.创建表时添加主键约束

Create table stuent( Sid number(8,0), Name varchar2(20), Sex char(2), Birthday date, Addess varchar2(50), Constraint sid_pk primary key(sid) );

b.修改表时添加主键约束

alter table studet add constraint sid_pk primary key(sid);

c.删除主键约束的方式

DROP PRIMARY KEY; 唯一性约束(unique constraint)

用于指定一个或者多个列的组合值具有唯一性,以防止在列中输入重复的值

注意事项: a.使用唯一性约束的列允许为空值 b.一个表中可以允许有多个唯一性约束 c.可以把唯一性约束定义在多个列上

a.创建表时设置唯一性约束

Create table stuent( Sid number(8,0), Name varchar2(20), Sex char(2), Birthday date, Addess varchar2(50), Email varchar2(50) unique, //直接设置唯一性约束 会有一个默认名 Cardid varcha2(18), Constraint uk_cardid unique(cardid) //设置唯一性约束并命名 );

b.修改表时添加唯一性约束

Alter table studnt Add constraint uk_cardid unique(cardid); 默认约束(default constraint) Create table stuent( Sid number(8,0), Name varchar2(20), Cname varchar2(20) default "吴亦凡" //这里就是默认约束 Sex char(2), Birthday date, ); 非空约束(not null consraint)

用于确保列不能为null,如果列定义了NOT NULL约束,那么当插入数据时,必须为该列提供数据;当更新列数据时,不能将其值设置为NULL。

非空(not null)属于列级约束

a.创建表时添加非空约束

Create table stuent( Sid number(8,0), Name varchar2(20) not null, //直接非空约束,会给一个默认名 Sex char(2) cnstraint nn_sex not null, //添加非空约束并命名为nn_sex Birthday date, Addess varchar2(50) );

b.修改表时添加非空约束:(与其他约束有所不同)

修改其他约束语法格式:

ALTER TABLE table_name ADD[CONSTRAINT constraint_name] constraint_type(column);

添加非空约束时语法格式:使用MODIFY语句

ALTER TABLE table_name MODIFY (column_name datatype NOT ULL)

删除非空约束的方式

ALTER TABLE table_name MODIFY column_name datatype NULL;

c.删除约束:

将约束无效化或激活(暂时性删除)

DISABLE | ENABLE CONSTRAINT constraint_name

将约束彻底删除

DROP CONSTRAINT constraint_name

删除主键约束的方式

DROP PRIMARY KEY;

删除非空约束的方式

ALTER TABLE table_name MODIFY column_name datatype NULL; 检查约束(check constraint)

用于对输入列或者整个表中的值设置检查条件。以限制输入值,保证数据库的完整性。(如对性别的要求)

a.创建表时设置检查约束

Create table stuent( Sid number(8,0), Name varchar2(20), Sex char(2) check(sex=’男’ or sex=’女’), Birthday date, Addess varchar2(50), );

或者

Create table stuent( Sid number(8,0), Name varchar2(20), Sex char(2), Birthday date, Addess varchar2(50), Constraint ck_sex check(sex=’男’ or sex=’女’) );

b.修改表时添加检查约束

Alter table stdentt Add constraint ck_sex check(sex=’男’ or sex=’女’);

c.删除检查约束

禁用:alter table student disable constraint ck_sex; 彻底删除:alter table student drop constraint ck_sex;

外部键约束(foreign key constraint)

用于建立和加强两个表数据之间的链接的一列或多列。外间约束是唯一涉及两个表关系的约束

先创建的表叫主表 后创建的表叫从表 有一列的内容是相同的作为外键

设置外键约束的语法格式

a.列级约束

CREATE TABLE 从表 (column_name datatype REFERENCES 主表(column_name datatype)[ON DELETE CASCADE],...); //这里的 ON DELETE CASCADE代表着是否级联删除

什么是级联删除?

删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用。在级联删除中,还删除其外键值引用删除的主键值的所有行。

例如员工表中一项数据是部门ID,部门ID是部门表的主键,如果是级联删除,当删除了部门A的时候,会把所有属于部门A的员工都给删除。

b.表级约束(创建的是从表) 在表加入

CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES 主表(column_name)[ON DELETE CASCADE]

创建表时设置外面约束(方法1)

主表:

Create table department( Depid varchar2(10) primary key, Depname varchar2(30) );

从表:

Create table stuent( Sid number(8,0), Name varchar2(20), Sex char(2), Birthday date, Addess varchar2(50), Depid varchar2(10) references department(depid) ); //Depid varchar2(10) references department(depid) //Constraint fk_depid foreign key(depid) //References department(depid) //On delete cascade

创建表时设置外面键约束(方法2)

主表:

Create table department( Depid varchar2(10) primary key, Depname varchar2(30) );

从表:

Create table stuent( Sid number(8,0), Name varchar2(20), Sex char(2), Birthday date, Addess varchar2(50), constraint fk_depid foreign key(depid) references department(depid) on delete cascade );

外键约束注意事项: a.设置外键约束时,主表的字段必须时主键列(或唯一列) b.主从表中相应字段必须是同一数据类型 c.从表中外键字段的值必须来自主表中的相应字段的值,或者为null

修改表时添加外键约束

Alter table student Add constraint fk_depid foreign key(depid) References department(depid) On delete cascad


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3