您现在的位置: 万盛学电脑网 >> 程序编程 >> 数据库 >> oracle教程 >> 正文

Oracle数据库入门之DDL与数据库对象

作者:佚名    责任编辑:admin    更新时间:2022-06-22

  数据库对象

  常见:表:存放数据的基本数据库对象,由行(记录)和列(字段)组成

  约束条件:执行数据校验,保证数据完整性的系列规则

  视图:表中数据的逻辑显示

  索引:根据表中指定的字段建立起来的顺序,用于提高查询性能

  序列:一组有规律的整数值

  同义词:对象的别名

  命名:必须以字母开头。可以包含字母、数据、下划线、$、#

  同一方案(用户)下的对象不能重名。不能使用Oracle的保留字

  补充:Oracle数据库中的表分为用户定义的表和数据字典表

  用户定义的表:用户自己创建并维护的一组表,包含了用户所需的信息

  数据字典表:由Oracle数据库自动创建并维护的一组表,包含数据库信息

  创建表

  概述:创建表需要两个前提条件,即具备创建表的权限和有可用的存储空间

  创建表时必须指定表名、字段名、字段类型。create table为DDL语句,一经执行不可撤销

  语法:create table [schema.]table(column datatype [default expr][,...]);--缺省是将表创建在当前方案(用户)下

  举例:create table scott.test1(name varchar2(20),hiredata date default sysdate,salary number(8,2) default 0);

  向test1插入新记录的时候,若没有指定hiredate值,缺省就会取当前的系统时间。同样也设置了salsry的缺省值为0

  如果插入记录的时候也没有指定eid的值,那么eid的缺省值是null。注意数值型的缺省值不是0,而是null

  补充:还可以使用子查询创建表。这是创建表的另一种方式,但不是很常用。即创建表的同时将子查询的结果直接插入其中

  新建表与子查询结果的字段列表必须匹配。新建表的字段列表可以缺省,这时字段名就跟子查询的结果的字段名相同

  语法:create table [schema.]table(column[,...]) as subquery;--括号中不可以定义字段类型

  举例:create table myemp2 as select empno,ename,sal*12 from emp;--非法。表达式不可以充当字段,需要指定别名

  create table myemp2 as select empno,ename,sal*12 annsal from emp;--合法

  create table myemp(编号,姓名,年薪) as select empno,ename,sal*12 from emp;--指定新建表的字段名

  修改表结构

  概述:使用alter table语句修改表的结构。包括添加、修改、删除字段。alter语句为DDL语句,一经执行不可撤销

  添加:在alter table语句中使用add子句添加新字段。新字段只能被加到整个表的最后

  alter table table add(column datatype [default expr] [column datatype]...);

  alter table test1 add(grade number(3),phone varchar2(20) default '无');

  修改:在alter table语句中使用modify子句修改现有字段。包括数据类型、大小和默认值。但不可以修改字段名

  alter table table modify(column datatype [default expr] [column datatype]...);

  alter table test1 modify(grade number(2),phone varchar2(15) default '010-12345678');

  修改的缺省值设置,只对此后新插入的记录有效。修改操作会受到当前表中已有数据的影响

  当已有记录的相应字段只包含空值时,类型和大小都可以修改。如果该字段已包含数值,则修改可能失败

  删除:在alter table语句中使用drop子句删除字段。从每行中删除该字段占据的长度和数据,释放在数据块中占用的存储空间

  alter table table drop(column[,column]...);

  alter table test1 drop(grade,phone);

  清空表数据

  概述:使用truncate table可以清空表中数据。清除表中所有记录,释放表的存储空间,它是DDL语句,一经执行不可撤销

  它与DML中的delete语句有很大的差别。delete可以进行条件性的删除,也可以定义到事务中,对其进行回滚或撤销

  语法:truncate table table;--它清除的并不是表格本身,表的结构还是存在的,只不过变成了一个空表

  删除表

  概述:使用drop table语句删除表,它是DDL语句,一经执行不可撤销

  表中所有数据将被删除,此前未完成的事务将被提交,所有相关的索引被删除

  语法:drop table table;

  重命名表

  概述:使用rename语句可以改变现有表的名称,它是DDL语句,一经执行不可撤销

  也可修改其它数据库对象(视图、序列、同义词等)的名称。执行重命名操作的必须是对象的所有者

  语法:rename old_name to new_name;

  举例:rename test1 to test88;

  数据字典

  概述:数据字典是Oracle数据库的核心,用于描述数据库及其所有对象。数据字典由一系列只读的表和视图组成

  这些表和视图属SYS用户拥有,由Oracle Server负责维护,用户可以通过select语句进行访问

  内容:数据库的物理和逻辑结构。对象的定义和空间分配。完整性约束条件。用户。角色。权限。审计记录

  视图:数据字典中的视图都是只读的,主要可以分为如下三类

  dba(所有方案包含的对象信息)、all(用户可以访问的对象信息)、user(用户方案的对象信息)

  举例:select table_name from user_tables;--查看当前用户拥有的所有表的名字

  select table_name from all_tables;--查看当前用户可以访问的所有表的名字

  select distinct object_type from user_objects;--查看当前用户拥有的所有对象的类型

  select distinct object_type from all_objects;--返回当前用户可以查看的所有的对象的类型

  select table_name frome dba_tables;--查看所有用户拥有的所有表的名字

  select * from user_constraints;--查看当前方案(用户)下所有的约束的信息

  select * from user_constraints where table_name='student';--查看当前方案(用户)下的student表中的约束信息

  约束(Constraint)

  概述:约束是在表上强制执行的数据校验规则,用于保护数据的完整性

  具体包括五种,即not null(非空)、unique key(唯一键)、primary key(主键)、foreign key(外键)、check(检查)

  分类:域完整性约束:not null、check。实体完整性约束:unique、primary key。参照完整性约束:foreign key

  说明:约束也是一种数据库对象。如果创建约束时,用户没有指定它的名字,那么系统会自动的为其命名

  在Oracle使用SYS_Cn格式命名约束,也可以由用户命名。也可以通过数据字典视图查看约束

  可以在建表的同时添加约束,也可以在建表后单独添加约束。可以在表级或列级定义约束

  通常并不太建议在建表之后再添加约束或者建表之后再修改表的结构

  查看:查询用户字典视图user_constraints可得到当前用户的所有约束。即select * from user_constraints;

  查询用户字典视图user_cons_columns可获知约束建立在哪些字段上。即select * from user_cons_columns;

  创建:create table [schema.]table(column datatype[default expr][column_constraint],...[table_constraint]);

  alter table table add [constraint constraint_name] constraint_type(column);--这是建表后添加约束

  比如alter table stu add constraint stu_sid_pk primary key(sid);--原stu表中有sid和name两个字段

  等价alter table stu add primary key(sid);--只不过此时的约束名就会由系统自动设定了

  特例:建表后添加约束时,非空约束必须使用modify子句添加。实际上相当于重新定义了某个字段

  如alter table stu modify(name not null);或alter table stu modify(name char(8) default 'N/A' not null);

  也可以修改多个字段,如alter table stu modify(sid not null,name default 'Stone' not null);

  删除:语法为alter table table drop constraint constraint_name;

  alter table table drop primary key;--删除主键的另一种方式。只有主键才可以这样删除

  因为一个表中只可以定义一个主键,所以不会有二义性。而其它的约束,都可能定义多个

  续一:删除约束时,若存在与该约束相关联的其它约束,则删除操作会失败。可用cascade子句将其它关联约束一并删除

  语法为alter table table drop constraint constraint_name cascade;

  这个时候一共删除了两个约束,一个是主表中的主键,一个是子表中的外键

  续二:删除表中字段时,若该字段处于多字段联合约束条件(联合主键、联合唯一键、存在参照当前字段的外键)中时

  则删除会失败。此时可使用cascade constraints子句将与该字段相关的约束一并删除

  语法为alter table table drop(column[,column]...) cascade constraints;

  禁用:在alter table中,可使用disable constraint子句禁用已有约束。也可用cascade选项将相关联的约束也一并删除

  语法为alter table table disable constraint constraint_name [cascade];

  禁用跟删除不同,它还可以启用。而且约束的具体内容或约束的定义等,还是存在的,只是临时不起作用了

  启用:在alter table中,可使用enable constraint子句启用已被禁用的约束

  语法为alter table table ena