数据表的创建与管理

来源:互联网 发布:java中的有参构造方法 编辑:程序博客网 时间:2024/05/16 11:24

  在之前所使用的全部数据表都是由系统自己提供的,但是在实际的工作之中,数据表有可能需要由用户自己来根据具体的功能需求进行设计,此时就需要使用DDL语法(DDL主要是操作数据库对象),进行数据表的创建。

1.1、常用的数据类型(SQL)

几乎只要是进行数据库的常规开发,都会使用到以下的几种类型:

 • VARCHAR2(n):定义字符串,如果保存的内容在200个左右就使用此类型,其他数据库为VARCHAR;

 • NUMBER:表示的是一个数字,而这个NUMBER可以表示整数或实数(小数):
  |- NUMBER(n):表示最多只能存放n位的整数,可以使用INT代替;
  |- NUMBER(n,m):表示存放m位小数,n-m位整数,可以使用FLOAT代替;
  
 • DATE/TIMESTAMP:表示日期时间,其中TIMESTMAP包含毫秒数据;
 
 • CLOB:可以保存大文本数据,例如,保存一个《红楼梦》、《三国演义》,最多可以保存4G的文字;
 

1.2、创建数据表

 如果要进行数据表的创建操作,那么可以采用如下的语法完成:

CREATE TABLE 表名称 (    字段      类型      [DEFAULT 默认值] ,    字段      类型      [DEFAULT 默认值] ,        ...    字段      类型      [DEFAULT 默认值] ) ;

范例:下面创建一张数据表,创建一张成员表

CREATE TABLE member(    mid NUMBER,    name    VARCHAR2(30) DEFAULT '无名氏',    age NUMBER(3),    brithday DATE        DEFAULT SYSDATE);

范例:插入数据
  • 全部数据都插入:

INSERT INTO member(mid,name,age,brithday) VALUES (1,'张三',20,SYSDATE) ;

  • 利用默认值自动设置数据:

INSERT INTO member(mid,age) VALUES (2,30) ;

  如果存在了默认值,用户没有设置的时候(或者是没有明确设置NULL)的时候自动使用默认值进行字段内容设置。
 
 

1.3、复制数据表

  用户除了创建属于自己的数据表之外,也可以从已有的数据表之中复制得来,复制数据表的语法如下:

CREATE TABLE 表名称 AS 子查询 ;

范例:复制一张只包含30部门雇员信息的数据表

CREATE TABLE emp30 AS SELECT * FROM emp WHERE deptno=30 ;

范例:将任意的一个子查询设置为数据表

CREATE TABLE dept_details    ASSELECT d.deptno,d.dname,d.loc,temp.count,temp.avgFROM dept d , (    SELECT deptno dno,COUNT(empno) count , AVG(sal) avg    FROM emp     GROUP BY deptno) tempWHERE d.deptno=temp.dno(+) ;

  实际上所谓的复制表,就是将子查询之中的内容定义为数据表保存而已。
  
范例:要求复制一张emp数据表,但是只复制表结构,不复制数据

CREATE TABLE empnull     ASSELECT * FROM emp WHERE 1=2 ;

  以上的这种复制表的操作语法,只能够针对于Oracle数据库使用,其他的数据库使用其他命令。

1.4、为表重命名

  首先来观察一条查询:

SELECT * FROM tab ;

  此操作的主要功能是查询一个用户下的所有数据表,可以理解为数据对象查询。但问题是,发现所有用户定义的数据表都可以立刻在此上查找到,为什么呢?
   那么既然可以查找到,就证明一定存在一个记录对象的信息的数据表。那么这样的信息维护就可以称为数据字典表,即:所有的数据库对象都是通过数据字典表保存信息的,在Oracle之中数据字典表一共有三类:ALL_*、DBA_*、USER_*,例如,如果要查询所有的数据表,使用“user_tables”查看。
  那么,如果说现在要想更新表名称,如果对于数据字典来讲,那么相当于更新了数据字典中的某一个列的信息,但是所有的数据字典都是由Oracle自己维护的,用户是没有权利直接操作,如果要操作只能够通过命令完成。为表重命名的命令如下:

RENAME 旧的表名称 TO 新的表名称 ;

范例:将member表修改为person表

RENAME member TO person ;

  不过此操作只有Oracle自己操作,会与不会意义不大,知道就行了。
  
   提醒:如果数据库之中发生了任何的DDL操作,那么所有未提交的事务,都会自动的进行提交,即:不可再回滚任何的更新操作。

1.5、截断表

  如果现在数据表之中的数据不再需要的时候,最早的做法是:“DELETE FROM 表名称”,但是这种做法实际上并不会立刻释放掉数据表所占用的各个资源(物理存储、索引资源、约束资源等)。如果现在希望表中的数据彻底清空,所有的资源彻底释放,就可以采用截断表的操作完成。语法:

TRUNCATE TABLE 表名称 ;

范例:截断person表

TRUNCATE TABLE person ;

  表一旦截断,就彻底清空了,所有的数据就都消失了。
  

1.6、删除表

  表为数据库对象,如果一张表不再使用的时候,就可以将其删除,删除表的语法如下:

DROP TABLE 表名称 ;

范例:删除person表

DROP TABLE person ;

  发现很有意思的一点是,所有的表删除之后都会留一些痕迹。
  

1.7、闪回技术

  很明显,删除表操作是一件非常可怕的事情。在Oracle 10g之前,只要执行了删除表的操作,那么数据表就彻底被删除了,连一丝后悔的机会都不给用户,所以在Oracle 10g开始,引入了一个与Windows的回收站类似的功能,即:所有被删除的数据表,先放到回收站之中,如果有需要可以恢复。

范例:查看回收站

SHOW RECYCLEBIN ;

范例:从回收站之中恢复person表

FLASHBACK TABLE person TO BEFORE DROP ;

  FLASHBACK TABLE person TO BEFORE DROP ;
可是不要忘记了,在windows之中,也有不经过回收站而彻底删除文件的操作支持,为此,在Oracle中也有一种相关的操作项。

范例:彻底删除person表,不经过回收站

DROP TABLE person PURGE ;

范例:从回收站之中删除dept_details表

PURGE TABLE dept_details ;

范例:清空回收站

PURGE RECYCLEBIN ;

  回收站这一功能毕竟还是属于Oracle自己的功能,但是由于一些表删除之后会有一些痕迹,所以只需要记住清空回收站的指令即可。
  

1.8、修改表结构

  当一张数据表创建完成之后,那么有可能发现表结构无法满足当前的系统开发要求,那么在这种情况下就必须修改表的结构,修改表语法使用ALTER开始,例如:现在有如下的数据表。

CREATE TABLE member(    mid     NUMBER ,    name    VARCHAR2(20)) ;INSERT INTO member(mid,name) VALUES (1,'张三') ;INSERT INTO member(mid,name) VALUES (2,'李四') ;INSERT INTO member(mid,name) VALUES (3,'王五') ;

1、 为表中增加字段
  要为数据表增加字段可以使用如下的语法完成:

ALTER TABLE 表名称 ADD (字段 类型 [DEFAULT 默认值] , 字段 类型 [DEFAULT 默认值] ,..) ;

范例:为member表添加一个email字段,此字段之中不设置默认值

ALTER TABLE member ADD(email VARCHAR2(30)) ;

  此时,增加的email内容全部为null。

范例:为member表添加一个sex字段,此字段设置默认值

ALTER TABLE member ADD(sex VARCHAR2(10) DEFAULT '男') ;

   此时,所有的行的数据都被更新了。

2、 修改已有字段

  如果表中的某些字段不合适,可以通过如下语法完成:

ALTER TABLE 表名称 MODIFY (字段 类型 [DEFAULT 默认值] , 字段 类型 [DEFAULT 默认值] ,..) ;

范例:将name字段设置一个默认值

ALTER TABLE member MODIFY (name VARCHAR2(10) DEFAULT '无名氏') ;

  在实际的工作之中,所有的数据表应该在先期设计完毕,实在必须修改的时候,最好的做法是删除表而后重新建立。IBM DB2数据库是根本就不允许修改表结构的。

0 0