[導(dǎo)讀]最近一直在學(xué)習(xí)Oracle數(shù)據(jù)庫。這幾天整理了下 表管理 以及約束的筆記 給大家分享下。
最近一直在學(xué)習(xí)Oracle數(shù)據(jù)庫。這幾天整理了下 表管理 以及約束的筆記 給大家分享下。
表管理
*!常用的數(shù)據(jù)類型!*
varchar/varchar2 表示一個(gè)字符串
number/ number(n): 表示一個(gè)整數(shù),數(shù)字長度是n,可以使用INT
\ number(m,n): 表示一個(gè)小數(shù),數(shù)字小數(shù)位長度是n,整數(shù)長度是m-n,可以使用FLOAT代替
date 表示日期類型,日期要按照標(biāo)準(zhǔn)日期格式進(jìn)行存放。
clob 大對象,表示大文本數(shù)據(jù),一般可以存放4G的文本。
blob 大對象,表示二進(jìn)制數(shù)據(jù),最大可以存放4G,例如:電影、歌曲、圖片
·表的建立。
1·復(fù)制一張表
create table 表名 as select * from emp; ----復(fù)制emp表中的結(jié)構(gòu)和內(nèi)容
create table 表名 as select * from emp where 1=2;----復(fù)制結(jié)構(gòu)不復(fù)制內(nèi)容
2·創(chuàng)建一張表。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獨(dú)有的命令)
rename … to … 只能在Oracle中使用
·截?cái)啾?/P>
清空一張表 不能回滾,
需要截?cái)啾碚Z法:
truncate +表明
############約束############
主要分為五種:
·主鍵約束:表示唯一的表示,本身不能為空。 *例如*:身份證編號、
·唯一約束:在以個(gè)表中只允許建立以個(gè)主鍵約束而其他不想出現(xiàn)重復(fù)的值的話,則可以使用唯一約束。
·檢查約束:檢查一個(gè)列的內(nèi)容是否合法。 *例如*:性別只能是男、女、中性。
·非空約束,就好像姓名這樣的字段就不能為空。
·外間約束,在兩張表中間進(jìn)行約束操作。
1·主鍵約束(primary key)
·一般在ID上使用,而且本身已經(jīng)默認(rèn)內(nèi)容不能為空??梢栽诮⒈淼臅r(shí)候指定。
_________________________范例__________________________________
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)
表示一個(gè)字段中的內(nèi)容是唯一的,其他列不允許重復(fù)。
_________________________范例__________________________________
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)
使用檢查約束來判斷一個(gè)列中插入的內(nèi)容是否合法、例如年齡的取值范圍
_________________________范例__________________________________
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)
);
________________________________________________________________
上面語句 優(yōu)化自定義 約束名稱
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)
之前的約束都是針對一張表的約束,這個(gè)主-外鍵約束是針對兩張表的約束。
范例:書這個(gè)表中的一本書屬于人這個(gè)表中的一個(gè)人。
(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)·插入完成兩張表之后,下一步插入一些數(shù)據(jù)。
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)·插入以下數(shù)據(jù)
insert into book(bid ,bname ,bprice,pid) values ( 1,'Java Se' ,'59','000000');
*!注意!*此編號的人根本不存在。數(shù)據(jù)也就不應(yīng)該插入。
*!注意!*此時(shí)應(yīng)該用到主-外鍵關(guān)聯(lián),關(guān)聯(lián)之后 字表 的數(shù)據(jù)跟隨著 父表 的數(shù)據(jù)內(nèi)容
主-外鍵語法:foreign key(字段) reference 表名(字段)后者表作為父表 后者表明是指定字段作為父表的字
段 book 表的創(chuàng)建有所改變,變成如下
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)
);
再插入數(shù)據(jù)
此時(shí)就不會(huì)出現(xiàn)找不到對應(yīng)數(shù)據(jù)的情況。這就是主外鍵。
·在字表中設(shè)置的外鍵在父表中必須是主鍵。
·刪除時(shí)應(yīng)該先刪除子表,再刪除父表。
drop table book; book表是父表。
drop table person; person表是字表。
可以使用強(qiáng)制刪除手段,但這個(gè)做法一般不使用。
________范例______________________
drop table book cascade constraint;不管約束 直接刪除。
__________________________________
·級聯(lián)刪除
建立主外鍵連接的時(shí)候可以加上 on delete cascade 刪的時(shí)候連同字表的對應(yīng)數(shù)據(jù)一起刪除掉。
這是外鍵的完整語法。
############修改約束#######(了解)##
·添加約束
alter 表名稱 add constraint 約束名稱 約束類型(字段);
*!重點(diǎn)!* ROWNUM
rownum:表示行號、實(shí)際上這此是一個(gè)列,但這個(gè)列是一個(gè)偽列,此列可以在每張表中出現(xiàn)。
更多信息請查看IT技術(shù)專欄