Oracle笔记(九) 表的创建及管理
对于数据库而言实际上每一张表都表示的是一个数据库的对象,而数据库对象指的就是DDL定义的所有操作,例如:表、视图、索引、序列、约束等等,都属于对象的操作,所以表的建立就是对象的建立,而对象的操作主要分为以下三类语法:
- 创建对象:CREATE 对象名称 …;
- 删除对象:DROP 对象名称 …;
- 修改对象:ALTER 对象名称 …;
一、常用的数据字段
每一张数据表实际上都是由若干个字段所组成,而每一个字段都会有其对应的数据类型,而在Oracle之中,常用的数据类型有如下几种:
№ |
数据类型 |
关键字 |
描述 |
1 |
字符串 |
VARCHAR2(n) |
其中n表示的是字符串所能保存的最大长度,基本上保存200个左右的内容 |
2 |
整数 |
NUMBER(n) |
表示最多为n位的整数,有时候也可以使用INT代替 |
3 |
小数 |
NUMBER(n,m) |
其中m为小数位,n-m为整数位,有时候也可以使用FLOAT代替 |
4 |
日期 |
DATE |
存放日期-时间 |
5 |
大文本 |
CLOB |
可以存储海量文字(4G),例如存储《三国演艺》、《红楼梦》 |
6 |
大对象 |
BLOB |
存放二进制数据,例如:电影、MP3、图片、文字 |
一般在开发之中使用最多的:VARCHAR2()、NUMBER、DATE、CLOB,而对于BLOB字段一般使用较少,首先BLOB可以存放4G的二进制数据,但是存放进去之后,一是数据库过于庞大,二是读取不方便;
二、表的创建
如果现在要想进行表的创建,可以使用如下的操作语法:
CREATE TABLE 表名称 (字段1 数据类型 [DEFAULT默认值],字段2 数据类型 [DEFAULT默认值],… …,字段n 数据类型 [DEFAULT默认值] );
下面创建一张成员表(member),有如下保存的信息:姓名、年龄、生日、个人简介。
CREATE TABLE member (name VARCHAR2(50) DEFAULT '无名氏',age NUMBER(3),birthday DATE DEFAULT SYSDATE,content CLOB );
表创建成功之后,下面开始向表中增加数据:
INSERT INTO member(name,age,birthday,content) VALUES('张三',20,TO_DATE('1990-08-12','yyyy-mm-dd'),'一个好人');
INSERT INTO member(age,content) VALUES(20,'一个好人');
一定要再次记住,表的创建是属于数据库对象的创建,所以使用的是CREATE语法。
三、表的复制
在之前学习过表的复制操作,下面给出其完整的操作语法:
CREATE TABLE 复制表名称 AS 子查询;
范例:复制一张只包含20部门雇员信息的表
CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20;
范例:现在要求将emp表的表结构复制出来,不要数据 —— 写一个永远满足不了的条件即可。
CREATE TABLE empnull AS SELECT * FROM emp WHERE 1=2;
但是以上的语法只是Oracle数据库所支持的操作,其他的数据库语法上会有一些区别。
四、为表重命名
在Oracle数据库之中,所有的数据实际上都是通过数据字典保存的,例如,在之前曾经使用过如下的一种查询:
SELECT * FROM tab;
以上就是一个数据字典,而在Oracle之中,提供了三种类型的数据字典,最常用的是:dba_、user_,所以下面查询一个user_tables数据字典:
SELECT * FROM user_tables;
也就是说Oracle中的所有数据都是按照文件保存的,那么所有的内容都会在数据字典中注册,既然这样,所谓的修改表名称实际上对于Oracle而言就相当于修改一条数据而已,而修改表名称的方法如下:
RENAME 旧的表名称 TO 新的表名称;
范例:将member表更名为person表
RENAME member TO person;
但是这种操作由于是Oracle数据库所独有的一种特性,所以了解即可,不用做深入的掌握。
五、截断表
在之前曾经讲解过一个删除表数据的操作,使用的是DELETE操作,但是这种删除操作本身有一个特点,即:可以进行事务的回滚,也就是说删除之后并不会立刻释放数据的资源,如果现在希望彻底释放掉一张表所占用的全部资源(表空间、索引等等)就可以使用截断表的语法,此语法如下:
TRUNCATE TABLE 表名称;
范例:截断person表
TRUNCATE TABLE person;
但是这种语法本身只是Oracle所有的,所以只做了解即可。
六、表的删除
表的删除操作指的是数据库对象的删除,既然是删除则使用DROP语句,删除表的语法如下:
DROP TABLE 表名称;
范例:删除person表
DROP TABLE person;
七、Oracle 10g的新特性:闪回技术
在Oracle 10g之后,为了预防用户的误删除表操作,专门提供了回收站的功能,用户所删除的表默认情况下会在一个回收站之中保存,而用户也可以通过回收站,进行表的恢复,所以此技术称为闪回(FLASHBACK);
范例:查看回收站
SHOW RECYCLEBIN;
这个时候可以发现所有已经删除的表都在回收站之中保存,那么下面就可以使用如下的语法恢复表:
FLASHBACK TABLE 表名称 TO BEFORE DROP;
范例:恢复myemp表
FLASHBACK TABLE myemp TO BEFORE DROP;
当然,现在也可以直接删除掉回收站中的一些数据表,语法如下:
PURGE TABLE 表名称;
范例:删除回收站中的person表
PURGE TABLE person;
范例:清空回收站
PURGE RECYCLEBIN;
如果现在希望删除一张表,而又不希望其进入到回收站之中,则可以在删除的时候增加PURGE。
DROP TABLE myemp PURGE;
这种技术是在Oracle 10g之后才有的,而Oracle 11g也是存在的。
问题:现在在回收站之中存在了一张tab表,而后又建立了一张tab表,那么如果从回收站中恢复的话,可以吗?
答:无法恢复。
八、修改表结构
如果一张建立好的数据表,发现其初期的结构已经不满足于后期的使用要求,则可以进行表的修改操作,而表的修改操作实际上就是数据库对象的修改操作,使用ALTER指令完成,例如,现在有如下一张表:
CREATE TABLE member (mid NUMBER,name VARCHAR2(50) );
现在希望可以向表中增加字段,所以此时可以采用如下的语法完成:
ALTER TABLE 表名称 ADD(列名称 数据类型 [DEFAULT 默认值],列名称 数据类型 [DEFAULT 默认值],…);
范例:为member表增加字段
ALTER TABLE member ADD(age NUMBER(3), birthday DATE DEFAULT SYSDATE);
如果增加的数据列没有默认值,则所有已有的数据的列的内容都是null,而如果增加的列指定了DEFAULT默认值的话,则所有已有的数据列都是设置的默认值。
现在也可以修改已有的表结构,此时的语法如下:
ALTER TABLE 表名称 MODIFY(列名称 数据类型 [DEFAULT 默认值],列名称 数据类型 [DEFAULT 默认值],…);
范例:将name字段的默认值定义为无名氏
ALTER TABLE member MODIFY(name VARCHAR2(100) DEFAULT '无名氏');
虽然在SQL语法之中以及Oracle数据库之中,都给出了修改表结构的操作,但是这种操作能不使用就不使用,从大型数据库来讲,世界上性能最高的数据库是IBM DB2,但是IBM DB2本身有一个平台的限制问题,所以如果说是跨平台的数据库则是Oracle数据库的性能最高。
在IBM DB2数据库之中是不允许修改表结构的,即:表建立完成之后就不能修改了,所以以后在开发之中也尽可能的不要去修改表结构。
九、思考题
现在要求建立一张nation表,表中有一个name字段,里面保存四条记录:中国、美国、巴西、荷兰,要求通过查询实现如下的操作效果:
中国 美国
中国 巴西
中国 荷兰
美国 巴西
美国 中国
美国 荷兰
剩下的依次类推,现在要求建立新的表并完成此查询的操作。
本题目的主要目的并不是在于查询的编写上,而是在于规范化数据库创建脚本的格式,以后只要是碰到了类似的要求,首先必须编写一个数据库创建脚本,这个脚本的要求如下:
1、 本文件的文件名称后缀必须是“*.sql”;
2、 先删除相应的数据表;
3、 编写创建表的语句;
4、 增加测试数据;
5、 提交事务;
--1、删除表 DROP TABLE nation PURGE; --2、创建表 CREATE TABLE nation(name VARCHAR2(50) ); --3、测试数据 INSERT INTO nation(name) VALUES('中国'); INSERT INTO nation(name) VALUES('美国'); INSERT INTO nation(name) VALUES('巴西'); INSERT INTO nation(name) VALUES('荷兰'); --4、事务提交 COMMIT;
本程序如果要想完成依靠笛卡尔积完成,属于表的自身关联。
SELECT n1.name,n2.name FROM nation n1,nation n2 WHERE n1.name<>n2.name;
而且以后如果面试之中,出现了一些复杂的查询,建议把脚本写全了。
转载于:https://www.cnblogs.com/mchina/archive/2012/09/10/2653420.html
Oracle笔记(九) 表的创建及管理相关推荐
- Oracle系列之七:表的创建与管理
Oracle表的创建与管理 1. 表的创建 2. 表的修改 3. 表中数据的增删改查 4. 表的Merge 5. 表的删除 6. 表的重命名 7. 表的索引 8. 表的约束 9. dual表 表是Or ...
- 实验三 mysql数据库与表的创建_实验二 数据库和表的创建与管理
实验二 数据库和表的创建与管理 创建用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表:Employees(员工信息表).Departments(部门信息表).Salary ...
- 数据库原理及应用——熟悉数据库管理工具、数据库和表的创建与管理
实验一 熟悉数据库管理工具.数据库和表的创建与管理 一.实验目的: 了解SQL Server或MYSQL数据库的基本知识: 熟悉SQL Server或MYSQL环境和系统结构: 掌握图形化交互工具的基 ...
- T-SQL:表的创建和管理
T-SQL:表的创建和管理 数据类型 整数类型 bit:可以取值为0.1或null.当作布尔类型来用,1为true. smallint -32,768到32,767 2字节 int:-20亿到20亿, ...
- 实验1 在MySQL创建数据库及表_数据库表的创建、管理和数据操作(实验一),数据库创建...
数据库表的创建.管理和数据操作(实验一),数据库创建 今天我们就以实验的形式对表的创建.管理和数据操作进行学习,上课吧. [实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识. ...
- Oracle DB 使用DDL语句创建和管理表
• 对主要的数据库对象进行分类 • 查看表结构 • 列举列可以使用的数据类型 • 创建简单的表 • 说明创建表时如何创建约束条件 • 描述方案对象如何工作 • 数据库对象 – 命名规则 • CREAT ...
- Oracle笔记(十四) 用户管理
SQL语句分为三类:DML.DDL.DCL,之前已经讲解完了DML和DDL,现在就差DCL操作的,DCL主要表示的是数据库的控制语句,控制的就是操作权限,而在DCL之中,主要有两个语法:GRANT.R ...
- Oracle在线撤销表空间,创办、管理撤销表空间
撤销管理模式: 用户通过设定撤销管理模式(undo mode)就可以灵活地选择使用手动撤销管理(manual undo management)或自动撤销管理(automatic undo manage ...
- Oracle学习:表的创建、修改、重命名、删除、闪回
一.表的创建 通过已有表创建表(保留其中的数据.不保留其中的数据,保留部分数据) (1)创建前提条件: 表空间的使用权限 create table 的权限 (2)表名的注意事项: 以字母开头 长度不能 ...
- Oracle笔记之表空间
Oracle中有一个表空间的概念,一个数据库可以有好几个表空间,表放在表空间下. 1. 创建表空间 创建表空间使用create tablespace命令: CREATE TABLESPACE foo_ ...
最新文章
- 用python打造一款文件搜索工具,所有功能自己定义!
- Exchange Server 2013就地电子数据展示
- python中html.parser_在Python中使用HTMLParser解析HTML的教程
- 从时速100公里行驶的车上向后发射时速100公里的棒球,会发生什么?
- hive 窗口函数_Datatist科技专栏 | Hive排序窗口函数速学教程!
- SAP License:SAP会计凭证抬头的字段状态控制
- iOS NSMutableURLRequest 上传图片
- 提交失败重连java_RxJava出错重连
- Sentaurus入门(2):器件仿真
- 读书笔记:《产品经理手册》(第4版)
- Axure的基本功能
- C盘用户文件夹下的AppData文件夹里放的是什么?
- MUI click事件无效 click没反应 click监听不到
- -moz、-ms、-webkit, -o各什么意思
- linux刻录win10u盘_使用UltraISO在Windows 10下刻录Ubuntu 18.04.2 U盘的方法
- 卡尔曼实时检测跟踪算法(论文总结)
- org.mapstruct.Mapper
- 02、电荷泵锁相环(CPPLL)的基本结构
- bzoj 3563: DZY Loves Chinese
- Ubuntun国内镜像下载及虚拟机安装与换源
热门文章
- 大学课程很少有教怎么设计单片机开发板,进阶板更不用说
- Linux下C++可视化调试神器vgdb
- 基于tetgen对曲面分隔的box区域做限定四面体剖分
- OpenCV轮廓vectorvector
- /etc/resolv.conf
- [代码审计]phpshe开源商城后台两处任意文件删除至getshell
- 连续区间(数据岛)查询
- No bean named 'xxxxxxx' available--springboot 上线打war包
- 6. 缓存 - 《APS.NET本质论》
- 微信小程序组件slider