表的创建与管理(重点)
在之前一直使用scott用户所定义的练习表,但是在很多情况下用户都是需要自己的业务来定义属于自己的
表,而这一过程就需要使用到表的创建功能,但是必须明确一点,表的创建与管理是属于Oracle对象的维护
过程,所以来说此部分的属于DDL的定义范畴
常用类型
数据表之中是由多个不同的数据类型所组成的,每一列都有自己的数据类型,在数据库开发之中,以下几种
类型最为常见
字符串:(VARCHAR2(n)):保存的内容在200个字以内的都使用此类型,例如:姓名,地址,邮政编码
整数数字(NUMBER(n)):保存整型数据,可以使用INT代替
小数数字(NUMBER(n,m)):保存m位小数,以及n-m位整数
日期(DATE):oracle中的DATE包含有日期时间
大文本数据(CLOB):如果保存一步《红楼梦》《三国演义》这样的数据就必须使用CLOB,CLOB大概是4G文字量
二进制数据(BLOB):存放电影,音乐,图片,文字,最多可以保存4G
而在以后的工作之中,主要使用VARCHAR2,NUMBER,DATE,CLOB四种类型
创建数据表
如果要进行创建数据表,必须清楚如下语法
CHEATE TABLE 表名称(
字段 数据类型 [DEFAULT 默认值],
字段 数据类型 [DEFAULT 默认值],
...
字段 数据类型 [DEFAULT 默认值]
);
范例:创建一张member表
CREATE TABLE member(
mid NUMBER,
name VARCHAR2(20) DEFAULT'无名氏',
age NUMBER(3),
birthday DATE DEFAULT SYSDATE,
note CLOB
);
这个时候就创建完成,通过“SELECT *FROM tab”可以查看表是否创建成功。通过“DESC member ”可以查看
member的表结构
范例:向表中增加数据
INSERT INTO member(mid,name,age,birthday,note)
VALUES(1,'张三见',35,TO_DATE('1982-09-11','yyyy-mm-dd'),'是个人');
INSERT INTO member(mid,age,note)
VALUES(2,35,'不是个人');
此时如果没有设置内容,则使用DEFAULT定义的默认值,一般而言,默认值都是自动设置的,或许有些时候
也不会它,例如,在之前介绍过逻辑删除,假如说一个标志位,在数据增加的时候不希望处理它,这个标志位
上使用“DEFAULT 0”表示,在数据增加之后就表示此数据没有被逻辑删除
复制表(了解)
所谓的复制主要是根据一个子查询来决定表的创建结构与数据,其复制表的语法如下
CREATE TABLE 表名称 AS 子查询;
范例:现在复制20部门所有雇员
CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20;
除了全部的显示字段之外,也可以只查询部门字段
CREATE TABLE emp10 AS SELECT empno,ename,job FROM emp WHERE deptno=10;
由子查询的字段决定了复制表的字段
范例:
CREATE TABLE deptstat AS
SELECT d.deptno,d.dname,d.loc,temp.count
FROM dept d,(
SELECT deptno dno,COUNT(empno) count
FROM emp
GROUP BY deptno) temp
WHERE d.deptno=temp.dno(+);
不管是什么样的子查询,只要是查询能返回结果,都可以根据返回结构来创建表。
范例:要求复制emp表结构,但是不复制表数据
只要条件语句不满足即可
CREATE TABLE empnull AS SELECT * FROM emp WHERE 1=2;
面试题:你怎么在SQLServer数据库下复制表?
...
为表重命名(了解)
如果说现在发现出现的数据表名称不合乎要求,就有了重命名的需求,但是在讲解具体操作之前,首先来
观察关于数据字典的概念
数据字典实际上是由Oracle自己维护的,主要是记录所有数据库之中进行的各项操作。当数据库之中执行了数据表
创建过程(数据库对象操作)的时候那么会自动的数据字典表之中保存一条与此表信息有关的内容,例如:
在之前使用过的“SELECT * FROM tab”,这个就是一种数据字典的查看方式,但又不是完全是
在Oracle中一共规定有三种类型的数据字典
user_*:表示一个当前用户下可以使用的数据字典
dba_*:表示由管理员查看的数据字典
all_*:表示当前用户下可能使用的所有数据字典(要比user_*)多;
范例:查看全部的数据表——user_tables
SELECT * FROM user_tables;
那么现在反过来讲,用户可以使用到的表“SELECT * FROM 表名称”查询后就是通过数据字典来判断表是否
存在。如果数据字典存在则显示全部数据,如果不存在则出现错误。那么所谓为表重命名实际上就是修改
数据字典的操作,但是这一操作肯定不是直接对数据字典使用UPDATE,只能够通过命令完成,而修改的命令如下.
RENAME 旧的表名称 TO 新的表名称;
范例:将member表修改为person
RENAME member TO person;
但是必须注意的是,由于数据表的一系列操作属于DDL的定义范畴,所有的DDL操作不受事务的控制,而且每当数据
库里面发生了DDL操作之后所有未提交的事务一定会自动事务。
同时对于重命名操作没有实际的研究意义,因为它只是Oracle才有的