[导读]最近一直在学习Oracle数据库。这几天整理了下 表管理 以及约束的笔记 给大家分享下。
最近一直在学习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:表示行号、实际上这此是一个列,但这个列是一个伪列,此列可以在每张表中出现。
更多信息请查看IT技术专栏