Oracle表管理以及约束笔记

表管理

*!常用的数据类型!*
varchar/varchar2 表示一个字符串
number/ number(n): 表示一个整数,数字长度是n,可以使用INT
      \ number(m,n): 表示一个小数,数字小数位长度是n,整数长度是m-n,可以使用FLOAT代替
date 表示日期类型,日期要按照标准日期格式进行存放。
clob 大对象,表示大文本数据,一般可以存放4G的文本。
blob 大对象,表示二进制数据,最大可以存放4G,例如:电影、歌曲、图片

·表的建立。
 1·复制一张表
  create table 表名 as select * from emp;   ----复制emp表中的结构和内容
  create table 表名 as select * from emp where 1=2;----复制结构不复制内容
 2·创建一张表。create 命令
  ________________范例____________________
  create table person
  (
          pid varchar2(18),
          name varchar2(200),
          age number(3),
          birthday date,
          sex varchar2(2)default '男'
  );
  ________________________________________
·删除表
drop 删除表。

·修改表(了解) 一般很少修改表 在IBM 的DB2中根本没有alter指令
 *!表中存在大量记录,删除的话 是不是很麻烦?!*  有命令:
 ·增加列:alter指令+table+表名称+add
  __________________________范例__________________________________
  alter table person add(address varchar(200) default '暂无地址');
  ________________________________________________________________
 ·修改列。alter指令+table+表名称+modify+(列信息); 
 
·表重命名(Oracle独有的命令)
 rename … to …  只能在Oracle中使用

·截断表
 清空一张表 不能回滚,
 需要截断表语法:
 truncate +表明

 

   ############约束############
主要分为五种:
 ·主键约束:表示唯一的表示,本身不能为空。 *例如*:身份证编号、
 ·唯一约束:在以个表中只允许建立以个主键约束而其他不想出现重复的值的话,则可以使用唯一约束。
 ·检查约束:检查一个列的内容是否合法。  *例如*:性别只能是男、女、中性。
 ·非空约束,就好像姓名这样的字段就不能为空。
 ·外间约束,在两张表中间进行约束操作。


1·主键约束(primary key)
 ·一般在ID上使用,而且本身已经默认内容不能为空。可以在建立表的时候指定。
 _________________________范例__________________________________
 create table person
  (
          pid varchar2(18) primary key,
          name varchar2(200),
          age number(3),
          birthday date,
          sex varchar2(2)default '男'
  );
 ________________________________________________________________

 ·可以用constraint来指定约束的名称
 _________________________范例__________________________________
 create table person
  (
          pid varchar2(18) ,
          name varchar2(200),
          age number(3),
          birthday date,
          sex varchar2(2)default '男',
          constraint person_pid_pk primary key (pid)
  );
 ________________________________________________________________

2·非空约束(not null)
 
 _________________________范例__________________________________
 create table person
  (
          pid varchar2(18) ,
          name varchar2(200) not null ,
          age number(3) not null ,
          birthday date,
          sex varchar2(2)default '男',
          constraint person_pid_pk primary key (pid)
  );
 ________________________________________________________________
3·唯一约束(unique)
 表示一个字段中的内容是唯一的,其他列不允许重复。
 _________________________范例__________________________________
 create table person
  (
          pid varchar2(18) ,
          name varchar2(200)  not null ,
          age number(3)   not null ,
          birthday date,
          sex varchar2(2)  default '男',
          constraint person_pid_pk primary key (pid)
  );
 ________________________________________________________________

4·检查约束(check)
 使用检查约束来判断一个列中插入的内容是否合法、例如年龄的取值范围

 _________________________范例__________________________________
 create table person
  (
          pid varchar2(18) ,
          name varchar2(200)  not null ,
          age number(3)   not null  check(age between 0 and 150),
          birthday date,
          sex varchar2(2)  default '男' check(sex in ('男','女','中性')),
          constraint person_pid_pk primary key (pid)
  );
 ________________________________________________________________
  上面语句 优化自定义 约束名称
  create table person
  (
          pid varchar2(18) ,
          name varchar2(200)  not null ,
          age number(3)   not null  ,
          birthday date,
          sex varchar2(2)  default '男' ,
          constraint person_pid_pk primary key (pid),
          constraint person_name_uk  unique(name),
          constraint person_age_ck check(age between 0 and 150),
          constraint person_sex_ck check(sex in ('男','女','中性'))
  );_________________________________________________
5·主-外键约束(foreign key)
 之前的约束都是针对一张表的约束,这个主-外键约束是针对两张表的约束。
 
 范例:书这个表中的一本书属于人这个表中的一个人。
 

  (1)·首先插入两张表。
drop table person;
drop table book;
create table person
  (
          pid varchar2(18) ,
          name varchar2(200)  not null ,
          age number(3)   not null  ,
          birthday date,
          sex varchar2(2)  default '男' ,
          constraint person_pid_pk primary key (pid),
          constraint person_name_uk  unique(name),
          constraint person_age_ck check(age between 0 and 150),
          constraint person_sex_ck check(sex in ('男','女','中性'))
  );
 
create table book
(
          bid number primary key not null ,
          bname varchar(30),
          bprice number(5,2),
           pid varchar2(18)
);
  (2)·插入完成两张表之后,下一步插入一些数据。
insert into book(bid ,bname ,bprice,pid) values ( 1,'Java Se' ,'59','111111');
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('111111','张三',30,to_date('1987-12-27','yyyy-mm-

dd'),'女');
 
  (3)·插入以下数据
insert into book(bid ,bname ,bprice,pid) values ( 1,'Java Se' ,'59','000000');
*!注意!*此编号的人根本不存在。数据也就不应该插入。
*!注意!*此时应该用到主-外键关联,关联之后 字表 的数据跟随着 父表 的数据内容

 主-外键语法:foreign key(字段) reference 表名(字段)后者表作为父表 后者表明是指定字段作为父表的字

段 book 表的创建有所改变,变成如下
 drop table book;
 create table book
(
          bid number primary key not null ,
          bname varchar(30),
          bprice number(5,2),
          pid varchar2(18) ,
          constraint person_book_pid_fk foreign key(pid) references person(pid)
);
再插入数据
此时就不会出现找不到对应数据的情况。这就是主外键。
 ·在字表中设置的外键在父表中必须是主键。
 ·删除时应该先删除子表,再删除父表。
 drop table book; book表是父表。
 drop table person; person表是字表。
可以使用强制删除手段,但这个做法一般不使用。
 ________范例______________________
 drop table book cascade constraint;不管约束 直接删除。
 __________________________________

 ·级联删除
  建立主外键连接的时候可以加上 on delete  cascade 删的时候连同字表的对应数据一起删除掉。
  这是外键的完整语法。


 
   ############修改约束#######(了解)##

·添加约束
alter  表名称 add constraint 约束名称 约束类型(字段);

 

 

    *!重点!*   ROWNUM
rownum:表示行号、实际上这此是一个列,但这个列是一个伪列,此列可以在每张表中出现。
  _____________范例______________________
  select rownum ,empno,ename,job from emp
  where rownum <=5;只显示前五条
  _______________________________________

想进行中间的截取,只能使用子查询。
__________________________范例________________显示中间五条。_____________________
select * from
(select rownum rn ,empno,ename,job from emp where rownum <=10)temp where temp.rn>5;
_______________________________________________________________________________

      

 

    学习以上内容实用到的sql语句如下。

--conn scott/tiger@orcl_localhost;
--create table  temp as (select * from emp where 1=2);
--select * from temp;
/*
create table person
(
        pid varchar2(18),
        name varchar2(200),
        age number(3),
        birthday date,
        sex varchar2(2)default '男'
);
*/
--drop table person;
/*
create table person
(
        pid varchar2(18),
        name varchar2(200),
        age number(3),
        birthday date,
        sex varchar2(2)default '男',
        address varchar(200)
);
*/
--drop table person;
create table person
(
        pid varchar2(18),
        name varchar2(200),
        age number(3),
        birthday date,
        sex varchar2(2)default '男'
);
--alter table person add(address varchar(200) default '暂无地址');
/*
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('1111111111','张三',30,to_date('1987-12-27','yyyy-mm-dd'),'女');
insert into person (PID,NAME,AGE,BIRTHDAY) values ('2222222222','李四',31,to_date('1987-12-26','yyyy-mm-dd'));
*/
--select* from person;
--alter table person modify(name varchar2(10) default '无名氏');
--insert into person (PID,AGE,BIRTHDAY,SEX) values ('2222222222',31,to_date('1987-12-26','yyyy-mm-dd'),'女');
--select * from person;
--conn scott/tiger@orcl_localhost;
--drop table person;
/*
 create table person
  (
          pid varchar2(18) primary key,
          name varchar2(200),
          age number(3),
          birthday date,
          sex varchar2(2)default '男'
  );
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('1111111111','张三',30,to_date('1987-12-27','yyyy-mm-dd'),'女');
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('1111111111','李四',31,to_date('1987-12-26','yyyy-mm-dd'),'男');
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values (null,'李四',31,to_date('1987-12-26','yyyy-mm-dd'),'男');
*/
/*
drop table person;
 create table person
  (
          pid varchar2(18) ,
          name varchar2(200),
          age number(3),
          birthday date,
          sex varchar2(2)default '男',
          constraint person_pid_pk primary key (pid)
  );*/
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('1111111111','张三',30,to_date('1987-12-27','yyyy-mm-dd'),'女');
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('1111111111','李四',31,to_date('1987-12-26','yyyy-mm-dd'),'男');
/*
drop table person;
 create table person
  (
          pid varchar2(18) ,
          name varchar2(200) not null ,
          age number(3) not null ,
          birthday date,
          sex varchar2(2)default '男',
          constraint person_pid_pk primary key (pid)
  );
*/
/*
drop table person;
 create table person
  (
          pid varchar2(18) ,
          name varchar2(200) unique  not null ,
          age number(3) not null ,
          birthday date,
          sex varchar2(2)default '男',
          constraint person_pid_pk primary key (pid)
  );
 
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('1111111111','张三',30,to_date('1987-12-27','yyyy-mm-dd'),'女');
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values   ('2222222222','张三',31,to_date('1987-12-26','yyyy-mm-dd'),'男');
*/
drop table person;
create table person
  (
          pid varchar2(18) ,
          name varchar2(200)  not null ,
          age number(3)   not null  check(age between 0 and 150),
          birthday date,
          sex varchar2(2)  default '男' check(sex in ('男','女','中性')),
          constraint person_pid_pk primary key (pid)
  );
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('1111111111','张三',300,to_date('1987-12-27','yyyy-mm-dd'),'女');
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('1111111111','张三',30,to_date('1987-12-27','yyyy-mm-dd'),'无');
 drop table person;
 create table person
  (
          pid varchar2(18) ,
          name varchar2(200)  not null ,
          age number(3)   not null  ,
          birthday date,
          sex varchar2(2)  default '男' ,
          constraint person_pid_pk primary key (pid),
          constraint person_name_uk  unique(name),
          constraint person_age_ck check(age between 0 and 150),
          constraint person_sex_ck check(sex in ('男','女','中性'))
  );
/*
drop table person;
drop table book;
create table person
  (
          pid varchar2(18) ,
          name varchar2(200)  not null ,
          age number(3)   not null  ,
          birthday date,
          sex varchar2(2)  default '男' ,
          constraint person_pid_pk primary key (pid),
          constraint person_name_uk  unique(name),
          constraint person_age_ck check(age between 0 and 150),
          constraint person_sex_ck check(sex in ('男','女','中性'))
  );
 
create table book
(
          bid number primary key not null ,
          bname varchar(30),
          bprice number(5,2),
           pid varchar2(18)
);
*/
 /*drop table book;
 create table book
(
          bid number primary key not null ,
          bname varchar(30),
          bprice number(5,2),
          pid varchar2(18)
          constraint person_book_pid_fk foreign key(pid) references person(pid)
);
insert into book(bid ,bname ,bprice,pid) values ( 1,'Java Se' ,'59','111111');
insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('111111','张三',30,to_date('1987-12-27','yyyy-mm-dd'),'女');
insert into book(bid ,bname ,bprice,pid) values ( 1,'Java Se' ,'59','000000');
*/
drop table book cascade constraint;
/* drop table book;
 create table book
(
          bid number primary key not null ,
          bname varchar(30),
          bprice number(5,2),
          pid varchar2(18) ,
          constraint person_book_pid_fk foreign key(pid) references person(pid) on delete cascade 
);
*/

 --rownum使用 这个是重点。
select * from
(select rownum rn ,empno,ename,job from emp where rownum <=10)temp where temp.rn>5;


引用地址:http://haheihei.blogbus.com/logs/61174559.html
博客地址http://haheihei.blogbus.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值