Oracle笔记(九)表的创建及管理(二)
以通过回收站,进行表的恢复,所以此技术称为闪回(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; www.2cto.com
这种技术是在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数据库之中是不允许修改表结构的,即:表建立完成之后就不能修改了,所以以后在开发之中也尽可能的不要去修改表结构。
九、思考题 www.2cto.com
现在要求建立一张nation表,表中有一个name字段,里面保存四条记录:中国、美国、巴西、荷兰,要求通过查询实现如下的操作效果:
中国 美国
中国 巴西
中国 荷兰
美国 巴西
美国 中国
美国 荷兰
剩下的依次类推,现在要求建立新的表并完成此查询的操作。
本题目的主要目的并不是在于查询的编写上,而是在于规范化数据库创建脚本的格式,以后只要是碰到了类似的要求,首先必须编写一个数据库创建脚本,这个脚本的要求如下:
1、 本文件的文件名称后缀必须是“*.sql”;
2、 先删除相应的数据表;
3、 编写创建表的语句;
4、 增加测试数据;
5、 提交事务;
--1、删除表
DROP TABLE nation PURGE;
--2、创建表
CREATE TABLE nation(
name VARCHAR2(50)
); www.2cto.com
--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;
而且以后如果面试之中,出现了一些复杂的查询,建议把脚本写全了。