oracle数据库对象--表和视图

oracle数据库对象–表和视图

表与视图是oracle数据库对象中最基本的也是最主要的两个对象,在开发应用中使用的也是最多的。该篇主要针对这两点对表和视图的一些操作(DDL,DML)进行介绍。

1.表

表是作为oracle数据库存储数据的一种数据结构,就相当于我们在java中用集合list,或者数组存储我们的数据一样,表是一种二维结构,有行 有列,我们把相同类型的数据归为一列,比如每个人都有姓名,我们就把姓名归为一列,年龄归为一列,而行对应着每个人的数据,比如第一行是小红的姓名和年龄,第二行是小强的姓名和年龄。通过创建表然后向表中插入数据,最终实现对信息的存储。
下面将介绍一下对表操作的一些sql语句:

(1)、创建表

1.第一种方式直接创建

create table table_name( 字段名1 字段类型 【约束】, 字段名2 字段类型 【约束】, 字段名3 字段类型 【约束】--其中【】代表该项可写可不写 ) --eg创建用户表,要求字段有用户编号,姓名,性别,年龄;其中编号为主键,姓名不能为空。 create table users( uid number(10) primary key, name varchar2(10) not null, sex varchar2(6) check sex in('男''女'), age number(3) );
--其中约束也是数据对象之一,下篇再对其做详细介绍
2.通过复制的方式创建,也就是我们想要常见的表结构已经存在,我们可以拷贝原表
create table users_2 as select *from users ;
--如果我们只想拷贝表结构而不拷贝表数据可以在后面加上where条件 where 1=2;
--这样我们就创建了一个新表user_2,其结构和表users表一模一样,当然我们也可以选择users表中的某些字段进行拷贝。

--注意点:1.表名必须以字母开头,当然还有一些其他注意事项,我们想如果你们不是刻意的话很难涉及到的,就不说了。
--2.在数据类型上我们了解几个orace常用的数据类型如 数字使用的是number了(size),所有的数字都可以用number表示的,
--所以小数也不例外。字符我们通常用的是varchar2(size),在mysql用的就是varchar(size),时间用date ,二进制文件
--如图片数据用blob.其他数据类型则根据需要再去了解。

(2)、删除表

--删除表就较为简单,记得语法结构就行。 第一种删除表数据,保留表结构
(1)delete from users;
--DELETE FROM TABLE_NAME; --这种方法会删除表中所有数据,但是会保留表的结构,但是不会释放表之前所占有的存储空间,可以执行回滚操作。 --将所有已经删除的数据进行恢复 
(2)truncate table users;
--TRUNCATE TABLE TABLE_NAME; --这种方法也可以删除表数据,保留表的结构,但是这里比delete方法更彻底一点在于,其会将表的存储空间设为初始值,且 --操作之后无法回滚。 
第二种删除表数据同时删除表结构
drop table users;
--DROP TABLE TABLE_NAME --该方法将彻底的对表进行删除,包括表数据和表结构,且不能回滚,然后回收之前占有的所有内存空间 

(3)、修改表结构

前面介绍了表的创建和删除,下面将介绍当我们创建表之后,如何对表的结构进行修改。
--添加一列(用户表添加身高一项,类型为number类型)
alter table users add (uheight number(3));
--ALTER TABLE TABLE_NAME ADD(COL_NAME TYPE);

--删除一列(删除用户表的身高一项)
alter table users drop column uheight;
--ALTER TABLE TABLE_NAME DROP COLUMN COL_NAME

--修改一列,将name 字段大小变为20
alter table users modify (name varchar2(20));
--ALTER TABLE TABLE_NAME MODIFY(COL_NAME TYPE);

--重名命一列,将name重命名为username
alter table users rename column name to username;
--ALTER TABLE TABLE_NAME RENAME COLUMN OLD_NAME TO NEW_NAME;

--修改表users名称为vipusers
rename users to vipusers;
--RENAME OLD_TABLENAME TO NEW_TABLENAME;

以上就介绍了表的一些DDL操作,下面将介绍我们在项目中应用最多的DML语句,即数据的增删改查,这里就简单介绍一些最基本的DML操作,后文应该可能还会有关于复杂一点的DML操作,主要也就是查询那块。

(4)、基本DML语句结构
---------------------------------------------添加--------------------------------------------------
--向users表中添加一条数据
insert into users values(1001,'黄小州','男',18);
--INSERT INTO TABLE_ANME VALUES(VALUE1,VALUE2,VALUE3,VALUE4,...)

--向users表中只插入编号,姓名,性别;
insert into users(uid,name,sex) values(1002,'蠢小蛙','男');
--INSERT INTO TABLE_NAME(COL_NAME1,COL_NAME2,COL_NAME3,COL_NAME4) VALUES(VALUE1,VALUE2,VALUE3,VALUE4)
-------------------------------------------查询--------------------------------------------
SELECT COL_NAME1,COL_NAME2,COL_NAME3 FROM TABLE_NAME WHERE .... --查询users表所有数据 select * from users;

--查询users表编号为1001的用户的信息
select * from users where uid=1001;
--查询users表用户的姓名和性别
select name,sex from users ;

查询是我们在开发中使用最多的地方,这里只是写了最简单的查询语句后文将推出更复杂的一些查询,包括多表连接查询,
单行行数,分组函数,高级子查询等等。
--注意,以后在复杂的一些条件查询中要遵守的一个约定就是 where语句要在 from 语句后面;
-------------------------------------------修改------------------------------------------
UPDATE TABLE_NAME SET COL_NAME = ? [WHERE .....] --修改users表的编号为1001的年龄为12update users set age = 12 where uid = 1001;

------------------------------------------删除------------------------------------
DELETE FROM TABLE_NAME WHERE COL_NAME = ? --删除users表所有数据 delete from users ;
--删除users表中姓名为黄福州的字段
delete from users where name ='黄福州'

2.视图

首先我们需要了解为什么会有视图的存在,它存在的意义在哪里,之前就提过表和视图是数据库基本对象中的两个很重要的对象。可见视图的地位也是非常重要的。
1.为什么要用视图?
答:举个例子,对于公司人员信息表上都有他们的薪资情况,财务再根据数据库里薪资来给每个人发放工资,所以工资这一栏是非常重要的,所以为了保证运转条理性,我们一般不能让数据库管理员看到这一栏的,毕竟管理员也是员工,对于这些敏感的信息,可能他看不到对大家都好。那么就衍生了该如何解决这个问题呢,有的人会说创建一个新的员工表,里面没有员工工资一栏,但是这个方法可是非常不明智的,因为当我们把原来的数据修改之后岂不是还要再新表上还要做一次修改,而且在新表上做了修改还要更新到主表,中间就会出现很多问题的,此时利用视图则是最合理的一个方法。
视图是从已存在表上抽出逻辑相关的数据集合,其本身和表的区别不大,都是对数据一种存储,只不过我们可以在已有表的基础上抽取一部分我们想要的数据。
2.我们修改视图之后会更新到基表中吗?
答:这个是肯定的,视图的意义就是对基表中的数据进行一部分提取后然后提供给其他人操作的,如果不能更新基表,那和新建一个表就毫无区别了,同时对于基表中数据的改变也能立马更新视图。

(1)、创建视图

视图的创建和备份一个表十分类似,就是改个关键字,从table改为view
CREATE VIEW VIEW_NAME
AS
SELECT ... FROM ...TABLE_NAME WHERE ...[WITH READ ONLY]

eg:
create view users_view
as 
select uid,name,sex from users;
如果期望对视图只能查看不能进行任何操作,则只需要在后面追加WITH READ ONLY
--从创建语句来看,视图也可以理解成对select语句的一个存储。
(2)、操作视图

因为视图只是对基表数据进行一次提取存储,所以本质上和表区别不大,所以在DML语句上也没有太大区别,
所以这里就不做详细介绍了,就是和表操作一样的,insert ,update ,delete,select,都相同。但是,很多时候视图是比我们的表要复杂了,
比如在基表中有基本工资和奖金两个字段,而我们在新建的视图中就创建了一个新的字段用来接收这两个字段的和,总工资。对于这种视图我们就不能使用update,和insert,以及delete语句来操作视图了,因为这在逻辑上也会造成很多说不通。
列举一下最简单的视图操作语句:

--查询视图
SELECT * FROM VIEW_NAME [WHERE...] --修改视图 1.UPDATE VIEW_NAME SET COL_NAME = ? [WHERE ...] 2.CREATE OR REPLACE VIEW_NAME AS SELECT COL_NAME1 别名,COL_NAME2 别名2,COL_NAME3 别名3 FROM TABLE_NAME [WHERE] --删除视图 1.彻底删除 DROP VIEW VIEW_NAME;
2.删除数据
DELETE FROM VIEW_NAME [WHERE ...] 

视图注意点:
当视图定义中包含以下元素之一时不能使insert:
1.组函数;
2.GROUP BY 子句;
3.DISTINCT 关键字;
4.ROWNUM 伪列;
5.列的定义为表达式;
6.表中非空的列在视图定义中未包括。

当视图定义中包含以下元素之一时不能使用update:
1.组函数;
2.GROUP BY子句;
3.DISTINCT 关键字;
4.ROWNUM 伪列;
5.列的定义为表达式.

当视图定义中包含以下元素之一时不能使用delete:
1.组函数;
2.GROUP BY 子句;
3.DISTINCT 关键字;
4.ROWNUM 伪列.

表和视图的基本操作就介绍到这里了,这里是最基本的操作,重在了解语法结构,在真正生产过程中,对表和视图的操作远比这些复杂,下文将介绍对表查询中的复杂部分,包括单行函数和多行函数,高级子查询等。

    原文作者:黄小小州
    原文地址: https://blog.csdn.net/love___code/article/details/79142072
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞