您的位置:首页 > 数据库 > Oracle

Oracle学习系列5

2016-05-06 23:00 656 查看
Oracle学习系列5
************************************************************************************

1,掌握表的建立与删除
了解Oracle中的主要数据类型

2,约束的分类和使用
3,表的关联:交,并,补
4,掌握ROWNUM伪列的作用
5,掌握序列的使用
6,掌握视图的作用
7,了解同义词,用户管理,权限分配与撤销,数据库的备份
------------------------------------------------------------------

创建和管理表(重点):

常用的数据类型:

number[int ,float], varchar ,date ,clob, blob,

表的建立:

create  table tab_name(

col1    type   [defalut 默认值],
col2    type   [default 默认值],
...
coln    type    [default 默认值]

)    ;

create table  tab_name as (子查询)  ;//赋值表
create table  tab_name as (select * from emp  where 1=2) ;//仅复制表结构

ex:创建表person
create table person(

UID  varchar(18),
name  varchar(200),
age   number(3),
birthday  date,

sex     varchar(2)  default '男'
) ;

ex:向表中增加数据:
insert into person(UID,name,age,birthday,sex)
values('111111111111111111','keivn',30,to_date('1994-04-09','yyyy-mm-dd'),'女');

ex:表的删除:

drop table tab_name ;

eg:drop table person;

ex:修改表结构:增加列,修改列

alter  table tab_name  add (col1 type default 默认值,
col2 type default 默认值,
...
coln type default 默认值

) ;  //增加列

alter table person add (address  varchar(200)  default '暂无地址') ;

alter table tab_name  modify (col1 type default 默认值,
col2 type default 默认值,
...
coln type default 默认值

) ;  //修改列

alter table person modify (name varchar2(20) default '无名氏');

/**
若数据库中对应字段里有一个很长的数据,则无法将表长度缩小

*/

ex:为表重命名

在oracle中提供了rename命令,对表进行重新命名。
rename  tab_name_old   to   tab_name_new ;

ex:
rename person to tperson ;

ex:截断表

若要清空一张表的数据,同时不需要回滚,可以立即释放资源就要使用
截断表的语法:
truncate  table tab_name ;

ex: truncate table tperson ;  //清空表数据
rollback ;     //使用rollback无效

************************************************************************************

思考题:
现有一张国家表,里面有字段:中国,美国,巴西,荷兰,
现要求通过查询实现对战功能:
中国 ----> 美国
中国 ----> 巴西
中国 ----> 荷兰
美国 ----> 中国
美国 ----> 巴西
美国 ----> 荷兰

问:此程序该如何实现?

分析:使用笛卡尔积完成

create table national(

name varchar(30)

) ;

insert into national(name)
values('中国')    ;
insert into national(name)
values('美国')    ;
insert into national(name)
values('巴西')    ;
insert into national(name)
values('荷兰')    ;

select t1.name ,t2.name
from national t1, national t2
where t1.name <>t2.name ;

************************************************************************************

约束(重点):

分类:
1,主键约束 -->是唯一的表示,本身不能为空,如身份证
2,唯一约束 -->在一个表中只能建立一个主键约束,其他列不想出现重复值可使用唯一性约束
3,非空约束 -->列的内容不能为空
4,检查约束 -->检查一个列的内容是否合法
5,外键约束 -->在两张表中进行的约束操作
---------------------------------------------------------------------------
1,主键约束:

create table person(

UID  varchar(18)  primay key,     //主键约束
name  varchar(200),
age   number(3),
birthday  date,
sex     varchar(2)  default '男'

) ;
/**
create table person(

UID      varchar(18)
name       varchar(200),
age      number(3),
birthday  date,
sex       varchar(2)  default '男',
constraint person_uid_pk primary key(uid)  //指定uid主键约束名称

) ;

*/

---------------------------------------------------------------------------
2,唯一约束 :unique

表示一个字段中的内容是唯一的,其他列不允许重复

create table person(

UID      varchar(18)
name       varchar(200)  unique  not null,  //非空约束,唯一约束
age      number(3) not null,      //非空约束
birthday  date,
sex       varchar(2)  default '男',
constraint person_uid_pk primary key(uid)  //指定uid主键约束名称

<constraint person_name_uk unique(name)  >  //指定name唯一约束名称

) ;

---------------------------------------------------------------------------

3,非空约束: not null

表示一个字段的内容不允许为空,即插入数据时必须插入该字段的值

create table person(

UID      varchar(18)
name       varchar(200)  not null,  //非空约束
age      number(3) not null,      //非空约束
birthday  date,
sex       varchar(2)  default '男',
constraint person_uid_pk primary key(uid)  //指定uid主键约束名称
<constraint person_name_nk not null(name)  >  //指定name非空约束名称

) ;

---------------------------------------------------------------------------

4,检查约束

create table person(

UID      varchar(18)
name       varchar(200)  not null,  //非空约束
age      number(3) not null  check( age between 0 and 150),   //非空约束,检查约束
birthday  date,
sex       varchar(2)  default '男' check(sex in('男','女',‘中’)), //检查约束
constraint person_uid_pk primary key(uid)  //指定uid主键约束名称

<constraint person_name_ck check(name)  >  //指定name检查约束名称

<constraint person_sex_ck check(sex)  >  //指定sex检查约束名称

) ;

---------------------------------------------------------------------------

5,外键约束(foreign key):

create table person(

UID      varchar(18)
name       varchar(200)  not null,  //非空约束
age      number(3) not null  check( age between 0 and 150),   //非空约束,检查约束
birthday  date,
sex       varchar(2)  default '男' check(sex in('男','女',‘中’)), //检查约束
constraint person_uid_pk primary key(uid)  //指定uid主键约束名称

<constraint person_name_ck check(name)  >  //指定name检查约束名称

<constraint person_sex_ck check(sex)  >  //指定sex检查约束名称

) ;//创建person表

create table book(

bid    number  primary key not null,
bname   varchar(30),
bprice    number(5,2)
uid     varchar(18)

constraint person_book_uid_fk  foreign key(uid)  references person(uid)  //外键约束

);//创建book表

/**
1,在子表book中设置的外键在父表person中必须是主键
2,删除时,先删除子表book,再删除父表person:
drop table book;
drop table person ;

*/

ex:插入测试数据:

insert into person(UID,name,age,birthday,sex)
values('111111111111111111','keivn',30,to_date('1994-04-09','yyyy-mm-dd'),'女');

insert into book (bid,bname,bprice)
values(1,'java',89.8,'1111111111111111111');


级联删除:

create table book(

bid    number  primary key not null,
bname   varchar(30),
bprice    number(5,2)
uid     varchar(18)

constraint person_book_uid_fk  foreign key(uid)  references person(uid) on delete cascade  //外键约束,级联删除

);//创建book表

delete from person where pid ='1111111111111'; //删除一条记录,同时删除子表book中的记录





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: