5表的创建及管理
- 格式:doc
- 大小:246.00 KB
- 文档页数:22
表的创建及管理1、本次预计讲解的知识点1、数据表的创建及管理;2、表约束的创建及管理3、利用DDL、DML完成一套完整的操作案例;4、序列的使用;5、数据的集合操作;6、PL SQL Developer工具的使用;2、具体内容2.1、表的创建及管理(重点)对于数据库而言实际上每一张表都表示的是一个数据库对象,而在数据库中对象指的就是DDL定义的所有操作,例如:表、视图、索引、序列、约束等等,都属于对象的操作,所以表的建立就是对象的建立,而对象的操作主要分为以下三类语法:·创建对象:CREATE 对象名称……;、·删除对象:DROP 对象名称.....;·修改对象:ALTER 对象名称......;2.1.1、常用的数据字段每一张数据表实际上都是由若干个字段所组成,而每一个字段都会有其对应的数据类型,而在Oracle之中,常用的数据类型有如下几种:No. 数据类型关键字描述1 字符串V ARCHAR2(n) 其中n表示的是字符串所能保存的最大长度,基本上保存200个左右的内容2 整数NUMBER(n) 表示最多为n位的整数,有时候也可以使用IN代替3 小数NUMBER(n,m) 其中m为小数位,n-m为整数位,有时候也可以使用FLOAT代替4 日期DATE 存放日期-时间5 大文本CLOB 可以存储海量文字(4G),例如存储《三国演义》、《红楼梦》6 大对象BLOB 存放二进制数据,例如:电影、MP3、图片、文字一般开发之中使用最多的:V ARCHAR2()、NUMBER、DATE、CLOB,而对于BLOB字段一般使用较少,首先BLOB可以存放4G的二进制数据,但是存放进去之后,一是数据库过于庞大,二是读取不方便;2.1.2、表的创建如果现在要想进行表的创建,可以使用如下的操作语法:CREAT TABLE 表名称(字段1 数据类型[DEFAULT 默认值],字段2 数据类型[DEFAULT 默认值],.........字段2 数据类型[DEFAULT 默认值]);下面创建一张成员表(member),有如下保存的信息:姓名、年龄、生日、个人简介。
CREATE TABLE member(name V ARCHAR2(50) DEFAULT '无名氏',age NUMBER(3),birthday DATE DEFAULT SYSDATE,content CLOB);表创建成功后,下面开始向表中增加数据:INSERT INTO member(name,age,birthday,content)V ALUES('张三',20,TO_DATE('1990-08-12','yyyy-mm-dd'),'好人');INSERT INTO member(age,content)V ALUES(20,'好人');一定要再次记住,表的创建时属于数据库对象的创建,所以使用的是CREA TE语法。
2.13、表的复制在之前学习过表的复制操作,下面给出完整的操作语法:CREATE TABLE 复制表名称AS 子查询;范例:复制一张只包含20部门雇员信息的表;CREATE TABLE emp20 ASSELECT * FROM emp WHERE deptno=20;范例:现在要求将emp表的表结构复制出来,不要数据---写个永远满足不了的条件即可。
CREATE TABLE empnull ASSELECT * FROM emp WHERE 1=2;但是以上的语法只是oracle数据库所支持的操作,其他的数据库语法上会有一些区别。
2.1.4、为表重命名(了解)在oracle数据库之中,所有的数据库实际上都是通过数据字典保存的,例如,在之前曾经使用过如下的一种查询:SELECT * FROM tab;以上就是一个数据字典,而在oracle之中,提供了三种类型的数据字典,最常用的是:dba、user_,所以下面查询一个user_tables数据字典:SELECT * FROM user_tables;也就是说oracle中的所有数据都是按照文件保存的,那么所有的内容都会在数据字典中注册,既然这样,所谓的修改表名称实际上对于oracle而言就相当于修改一条数据而已,而修改表名称的方法如下:RENAME 旧的表名称TO 新的表名称;范例:将member表更名为person表RENAME member TO person;但是这种操作由于是oracle数据库所独有的一种特性,所以了解即可,不用做深入的掌握。
2.1.5、截断表(了解)在之前曾经讲解过一个删除表数据的操作,使用的是DELETE操作,但是这种删除操作本身有一个特点,即:可以进行事务的回滚,也就是说删除之后并不会立刻释放数据的资源,如果现在希望彻底释放掉一张表所占用的全部资源(表空间、索引等等)就可以使用截断表的语法,此语法如下:TRUNCATE TABLE 表名称;范例:截断person表TRUNCATE TABLE person;但是这种语法本身只是oracle所有的,所以只做了解即可。
2.1.6、表的删除表的删除操作指的是数据库对象的删除,既然是删除则使用DROP语句,删除表的语法如下:DROP TABLE 表名称;范例:删除person表DROP TABLE person;2.1.7、oracle 10g的新特性闪回技术(理解)在oracle 10g之后,为了预防用户的误删除表操作,专门提供了回收站的功能,用户所删除的表默认情况下会在一个回收站中保存,而用户也可以通过回收站,进行表的恢复,所以此技术称为闪回(FLASHBACK);范例:查看回收站SHOW RECYCLEBIN;这个时候可以发现所有已经删除的表都在回收站之中保存,那么下面就可以使用如下的语法恢复表:FLASHBACK TABLE 表名称BEFORE DROP;范例:恢复myemp表FLASHBACK_TABLE person;当然,现在也可以直接删除掉回收站中的一些数据,语法如下:PURGE TABLE 表名称;范例:删除回收占中的person表PURGE TABEL person;范例:清空回收站PUEGE RECYCLEBIN;如果现在希望删除一张表,而又不希望其进入到回收站之中,则可以在删除的时候增加PURGEDROP TABLE myemp PURGE;这种技术是在oracle 10g之后才有的,而oracle 11g也是存在的。
问题:现在在回收站之中存在了一张tab表,而后又建立了一张tab表,那么如果从回收站中恢复的话,可以吗?无法恢复,但是一般人真不会出这样的问题。
2.1.8、修改表结构(了解)如果一张建立好的数据表,发现其初期的结果已经不满足于后期的使用要求,则可以进行表结构的修改操作,而表的修改操作实际上就是数据库对象的修改操作,使用ALTER指令完成,例如,现在有如下一张表:CREATE TABLE member(Mid NUMBER,name V ARCHAR2(50));现在希望可以向表中增加字段,所以此时可以采用如下语法完成:ALTER TABLE 表名称ADD(列名称数据类型[DEFAULT 默认值],列名称数据类型[DEFAULT 默认值],....);范例:为member表增加字段ALTER TABLE member ADD(age NUMBER(3),birthday DATE DEFAULT SYSDATE);如果增加的数据列没有默认值,则所有已有的数据的列的内容都是null,而如果增加的列指定了DEFAULT默认值的话,则所有已有的数据列都设置为默认值。
现在也可以修改已有的表结构,此时语法如下:ALTER TABLE 表名称ADD(列名称数据类型[DEFAULT 默认值],列名称数据类型[DEFAULT 默认值],....);范例:将name字段的默认值定义为无名氏ALTER TABLE member MODIFY(name V ARCHAR2(100) DEFAULT '无名氏');虽然在SQL语法之中以及oracle数据库之中,都给出了修改表结构的操作,但是这种操作能不用就不用,从大型数据库来讲,世界上性能最高的数据库是IBM DB2,但IBM DB2本身有一个平台的限制问题,所以如果说是跨平台的数据库则是oracle数据库的性能最高。
在IBM DB2数据库之中是不允许修改表结构的,即:表建立完成之后就不能再修改了,所以以后再开发之中也尽可能的不要去修改表结构。
额外补充:关于软件项目的开发基本流程1、获取需求:--->软件销售2、需求分析:--->根据客户方的提示,作出需求分析3、业务分析:--->数据库设计及借口设计;数据表设计4、编码实现:--->业务梳理5、软件测试:--->理论上应有专门的测试人员6、软件培训以及项目的维护;数据表的建立前提=软件的业务分析;2.1.9、思考题(面试题)现在要求建立一张nation表,表中有一个name字段,里面保存四条记录:中国,美国,巴西,荷兰,要求通过查询实现如下的操作效果:·中国美国·中国巴西·中国荷兰·美国巴西·美国中国·美国荷兰剩下的以此类推,现在要求建立新的表完成此查询的操作。
本题目的主要目的并不是在于查询的编写上,而是在于规范化数据库创建脚本的格式,以后只要碰到了类似的要求,首先必须要编写一个数据库创建脚本,这个脚本的要求如下:1、本文件的文件名后缀必须是“*.sql”;2、先删除相应的数据表;3、编写创建表的语句;4、增加测试数据;5、提交事务;--1、删除表DROP TABLE nation PURGE;--2、创建表CREATE TABLE nation(name V ARCHAR2(20));--3、测试数据INSERT INTO nation(name) V ALUES('中国');INSERT INTO nation(name) V ALUES('美国');INSERT INTO nation(name) V ALUES('巴西');INSERT INTO nation(name) V ALUES('荷兰');--4、事务提交COMMIT;本题型如果想要完成需要依靠笛卡尔积完成,属于表的自身关联SELECT ,FROM nation n1,nation n2WHERE <>;而且以后如果面试之中,出现了一些复杂的查询,建议把脚本写全了。