Oracle 学习第二篇
2017-10-25 16:53 你若安好! 阅读(183) 评论(0) 编辑 收藏 举报表的操作
学习目标:
n Oracle数据类型
n 表空间(Oracle独有)
n 表结构操作
Oracle数据类型
1、 char(size)
存放字符串,它最大可以存放 2000个字符,是定长。
例子:
create table test1(name char(32));
说明:
test1 表中的 name 字段最多存放 32 个字符,
不足 32 个字符 oracle 会用空格补齐,如果超过会报错。
2、 varchar2(size)
存放字符串,它最大可以存放 4000个字符,是变长。
举例说明:
create table test2(name varchar2(16));
//test2 表中的 name字段最多存放 16 个字符,实际有几个字符就占几个字符的空间,如果超过会报错。
注意:如果我们的数据的长度是固定的,比如编号(8 位),最好使用 char 来存放,因为这样存取的速度就会提高。如果存放的数据长度是变化的,则使用 varchar2 来存放。
3、 nchar(n)
以 Unicode编码来存放字符串,它最大可以存放 2000个字符,是定长。
举例说明:
create table test3(name nchar(32));
//与 char 类似,只是以 Unicode 编码存放字符串
4、 nvarchar(n)
以 Unicode编码来存放字符串,它最大可以存放 4000个字符,是变长。
举例说明:
create table test4(name nvarchar2(16));
//与 varchar2 类似,只是以 Unicode 编码存放字符串
5、 clob型
字符型大对象,它最大可以存放 8TB,是变长。(nvarchar(4000)满足不了需求)
与字符型的 char/varchar2/nchar/nvarchar2的使用方式一样。
6、 blob型
二进制数据,可存放图片、声音,它最大可以存放 8TB,是变长。
与字符型的 char/varchar2/nchar/nvarchar2的使用方式一样。
说明:一般情况下很少使用数据库来存放媒体类文件,一般只使用数据库来记录媒体类文件的 URL地址。如果考虑到文件的安全性,可以存放到数据库中来保存。
7、 number型
存放整数,也可存放小数,是变长。number(p,s)//p代表整个位数,s代表小数位
说明:
number(5,2): 表示一个小数有 5 位有效数,2 位小数。范围-999.99~999.99
如果数值超出了位数限制就会被截取多余的位数。但在一行数据中的这个字段输入 575.316,则真正保存到字段中的数值是 575.32。
number(5) : 等价于 number(5,0) 表示一个五位整数,范围-99999~99999。
输入 57523.316,真正保存的数据是 57523
8、 date类型
用于表示时间,(年/月/日/时/分/秒),是定长。
举例说明:
create table test5(birthday date);
//添加时个要使用默认格式 insert into test5 values('11-11 月-11');
如使用 insert into test5 values('2011-11-11');则报错。
说明:oracle 日期有默认格式为:DD-MON-YYYY,日-月-年;如果我们希望使用自己习惯的日期添加也可以,但是需要借助 oracle 函数来添加。
insert into test5 values(to_date('2015-5-3','yyyy-mm-dd'))
表空间(Oracle独有)
表空间概述:
表空间:表存在的空间,一个表空间是指向具体的数据文件。创建表空间的目的:主要是为了提高数据库的管理性能。
表空间属性:一个数据库可以包含多个表空间,一个表空间只能属于一个数据库;一个表空间包含多个数据文件,一个数据文件只能属于一个表空间;表空间可以划分成更细的逻辑存储单元从逻辑的角度来看,一个数据库(database)下面可以分多个表空间(tablespace);一个表空间下面又可以分多个段(segment);一个数据表要占一个段(segment),一个索引也要占一个段(segment )。 一个段(segment)由多个区间(extent)组成,一个区间又由一组连续的数据块(data block)组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。 那么从物理的角度上看,一个表空间由多个数据文件组成,数据文件是实实在在存在的磁盘上的文件。这些文件是由 oracle 数据库操作系统的 block 组成的。
Segment(段) :段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。
Extent (区间):分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象.
创建表空间:
n 创建表空间必须使用 system用户创建,语法如下:
create tablespace ts_hp(表空间名)
datafile 'E:\HP.DBF' //指定指向的数据文件路径
size 5m //表空间大小为 5m
autoextend on next 2m //自动扩展,每次扩展 2m
maxsize unlimited; //最大扩展量没有限制
n 创建用户时要指定默认的表空间:
创建用户指定默认表空间
create user zhangsan identified by 123 default tablespace hy_ts;
修改用户默认表空间:
alter user xiaoming default tablespace ts_hp
n 查看系统表空间:
查看表空间:
select * from v$tablespace
查看用户默认表空间:
select username,default_tablespace from dba_users where username='SCOTT';
注意:这里的用户名 SCOTT 必须是大写
表结构的操作
1. 创建表:
语法:
create table 表的名称(字段名称 1 数据类型, 字段名称 2 数据类型);
举例:创建学生表,字段和类型如下所示:
字段 字段类型 说明
id 整型 number
name 字符型 varchar2
sex 字符型 char(2)
brithday 日期型 date
score 小数型 number(3,1)
resume(简历) 大文本型 clob
代码:
create table students(
id number,
name varchar2(64),
sex char(2),
brithday date,
score number(3,1),
resume clob
);
2. 修改表
使用alter table 语句添加、修改或删除列的语法
n 添加列基本语法:
语法:
alter table TABLENAME add(columnname datatype);
alter table 表名 add(列名(字段名) 列类型(字段类型));
例如:给学生表添加班级编号
alter table students add(class_id number);
n 修改列基本语法:
语法:
alter table TABLENAME modify(columnname datatype);
alter table 表名 modify(列名(字段名) 列类型(字段类型));
例如:学生姓名变成 varchar2(30)
alter table students modify(name varchar2(30));
3. 删除列:
n 删除多列语法:
语法:
alter table TABLENAME drop(columnname,columnname2,...);
alter table 表名 drop(列名 1,列名 2,...);
n 删除单列语法:
语法:
alter table TABLENAME drop column COLUMNNAME;
alter table 表名 drop column 列名(字段名);
例如:删除学生表的 score字段
alter table students drop column score;
alter table students drop(score);
4. 修改表的名称:
语法:
rename OldTableName to NewTableName;
rename 表名 to 新表名;
例如:把学生表名 students 修改成 stu
SQL>rename students to stu;
5. 修改列名:
语法:
alter table 表名 rename column 旧列名 to 新列名;
例如:把学生表 resume 修改成 intro
SQL>alter table stu rename column resume to intro;
6. 查看表结构基本语法:
语法:
desc TABLENAME;
desc 表名;
7. oracle表的管理--添加数据
语法:使用 insert 语句向表中插入数据
insert into table[(column [,column...])] values(value [,value...]);
insert into 表名[(列名 [,列名 2...])] values(值 [,值 2...]);
插入全部数据:
insert into 表名 values(值 [,值 2...]);
注意事项:
1、插入的数据应与字段的数据类型相同。
2、数据的大小应在列的规定范围内,
例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中。
3、在 values 中列出的数据位置必须与被加入的列的排列位置相对应。
4、字符和日期型数据应包含在单引号中。
5、插入空值,不指定或 insert into table values(null);
6、给表的所有列添加数据时,可以不带列名直接添加 values 值。
例如:向 students 添加数据
insert into students (id,name,sex,brithday,fellowship,resume) values
(1,'张三','男','11-11 月-01',23.34,'hello');
insert into students values(2,'李四','男','11-11 月-02',67.34,'hello2');
insert into students values(3,'王五','女','11-11 月-03',671.34,'hello3');