1.创建和管理表
在Oracle中之前使用emp、dept等都是系统内建好的表,在SQL语法中同样支持了表的创建语句,要想创建表,则应该首先了解Oracle中最常使用到的几种数据类型
1)常用的数据类型
常用过的数据类型,如之前的emp表中已经出现的三种:NUMBER,VARCHAR,DATE
No
数据类型
描述
1
VARCHAR、VARCHAR2
表示的是一个字符串,有长度限制,255
2
NUMBER
NUMBER(n):表示一个证整数,数字的长度是n,可以使用INT
NUMBER(m,n):表示一个小数,数字小数长度为n,数字整数长度是m-n,可以使用FLOAT
3
DATE
表示日期的类型,按照标准的日期格式进行存放
4
CLOB
大对象,表示大文本数据,4G的文本
5
BLOB
大对象,表示二进制数据,最大可以存放4G,例如存放电影,歌曲,图片
2)表的建立
按照标准的语法进行,但是有时会指定约束,此处先给出简单语法
建立表的语法:
CREATE TABLE 表名称(
字段名称 字段类型 [DEFAULT 默认值]
字段名称 字段类型 [DEFAULT 默认值]
…
字段名称 字段类型 [DEFAULT 默认值]
)
复制表的语法:
CREATE TABLE 表名称 AS(子查询)
如果现在子查询写的是SELECT * FROM emp,表示将表的结构和内容一起复制
如果现在子查询写的是SELECT * FROM emp WHERE 1=2,加入了一个永远不可能成立的条件,则表示只复制表的结构,但是不复制表的内容
范例:复制表的结构
CREATE TABLE temp AS SELECT * FROM emp WHERE 1=2;
现在假设要创建一张person表,表中的字段类型及意义如下所示:
No
字段名称
字段类型
描述
1
pid
VARCHAR2(18)
表示人员编号
2
name
VARCHAR2(200)
表示人员姓名
3
age
NUMBER(3)
表示人员年龄
4
birthday
DATE
表示人员生日
5
sex
VARCHAR2(2)
表示人员性别,默认值是男
范例:向表中增加数据
李四的性别就是默认的男。
如果希望在表中增加一个address的字段,则可以将表删除之后再重新创建
3)表的删除
表的删除语法:
DROP TABLE 表名称;
范例:删除表,并重新编写新的脚本(数据库脚本就是删除表、建立表和增加表内容),加入address
4)表的修改(了解)
假设表中已经存在大量纪录,为了增加列而删除,就很麻烦,所以SQL语法中有专门修改表结构的命令:增加列ALTER、修改列MODIFY
增加列的语法:
ALTER TABLE 表名称ADD(列的名称 列的类型 DEFAULT 默认值,列的名称 列的类型 DEFAULT 默认值,…)
范例:为最早的person中增加address列
修改表结构的语法:
ALTER TABLE 表名称 MODIFY(列的名称 列的类型 DEFAULT 默认值,列的名称 列的类型 DEFAULT 默认值,…)
但是在修改表结构的时候,如果数据库中对应的字段里有一个很长的数据,则无法将表的长度缩小,例如现在在name字段中存在一个长度为20的字母,要将name的长度从200修改为10,则无法实现
范例:将person中的name字段的长度修改为50,默认值为"无名氏"
范例:再向表中插入数据,但是不给名字
表中×××编号重复,因为没有增加约束
在一般的数据库程序开发中,很少去修改表结构,这一点的IBM DB2数据库中就没有提供ALTER TABLE指令,所以在建表的时候一定要考虑到位。
5)表的重命名(了解)
Oracle独有
在Oracle中提供了RENAME命令,可以为表进行重命名
表的重命名的语法格式:
RENAME 旧的表名称 TO 新的表名称;
范例:将person表 重命名为tperson
6)表的截断(了解)
Oracle独有
之前讲解过,如果现在讲person表中的一条数据使用DELETE语句删除了,可以rollback回滚:DELETE RFOM emp10 WHERE empno=7782;
如果想清空一张表的数据, 同时不需要回滚,可以立刻释放资源,就需要使用截断表
截断表的语法:
TRUNCATE TABLE表名称;
范例:截断tperson表