代码改变世界

Oracle 学习第二篇

2017-10-25 16:53  你若安好!  阅读(183)  评论(0编辑  收藏  举报

表的操作

 

学习目标:

n Oracle数据类型

n 表空间(Oracle独有)

n 表结构操作

 

Oracle数据类型

1char(size)

存放字符串,它最大可以存放 2000个字符,是定长。

 例子:

create table test1(name char(32));

 说明

test1 表中的 name 字段最多存放 32 个字符,

不足 32 个字符 oracle 会用空格补齐,如果超过会报错。

 2varchar2(size)

存放字符串,它最大可以存放 4000个字符,是变长。  

举例说明:

create table test2(name varchar2(16));

//test2 表中的 name字段最多存放 16 个字符,实际有几个字符就占几个字符的空间,如果超过会报错。

注意:如果我们的数据的长度是固定的,比如编号(8 ),最好使用 char 来存放,因为这样存取的速度就会提高。如果存放的数据长度是变化的,则使用 varchar2 来存放。

 3nchar(n)

Unicode编码来存放字符串,它最大可以存放 2000个字符,是定长。

 举例说明:

create table test3(name nchar(32));

//char 类似,只是以 Unicode 编码存放字符串

 4nvarchar(n)

Unicode编码来存放字符串,它最大可以存放 4000个字符,是变长。

 举例说明:

create table test4(name nvarchar2(16));

//varchar2 类似,只是以 Unicode 编码存放字符串

5clob

字符型大对象,它最大可以存放 8TB,是变长。(nvarchar(4000)满足不了需求)

与字符型的 char/varchar2/nchar/nvarchar2的使用方式一样。

 

6blob

二进制数据,可存放图片、声音,它最大可以存放 8TB,是变长。

与字符型的 char/varchar2/nchar/nvarchar2的使用方式一样。

 说明:一般情况下很少使用数据库来存放媒体类文件,一般只使用数据库来记录媒体类文件的 URL地址。如果考虑到文件的安全性,可以存放到数据库中来保存。

 

7number

存放整数,也可存放小数,是变长。number(p,s)//p代表整个位数,s代表小数位

说明: 

number(5,2) 表示一个小数有 5 位有效数,2 位小数。范围-999.99999.99

如果数值超出了位数限制就会被截取多余的位数。但在一行数据中的这个字段输入 575.316,则真正保存到字段中的数值是 575.32

number(5) 等价于 number(5,0) 表示一个五位整数,范围-9999999999

输入 57523.316,真正保存的数据是 57523

8date类型

用于表示时间,(/////),是定长。

举例说明: 

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               字符型    char2

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');