oracle約束,一般是在重要主鍵約束用的,但是使用約束得考慮實際的情況,因為是要影響到效能的問題,使用不當會影響到資料的使用。
oracle約束有五種,分別是:
主鍵約束(primary key)
乙個表中只有乙個主鍵,而且主鍵是唯一的,不可重複,其實也相當於唯一性約束(unique)和非空約束(not null),但是效果卻不太相同
唯一性約束(unique)
保證資料的唯一性,可以出現空值
非空約束(not null)
列中的值不能為空
外來鍵約束(foreign key)
在父表中子表的列
檢查約束(check)
檢查資料是否滿足指定的條件
它可以在建立表的同時加上,或者是在建立表之後再新增,能在表級或者列級單獨定義,注意:表級約束可以定義在乙個列或者是多個列上,列級約束就只能定義在乙個列上。
1.定義約束,建立表的同時定義:
create table newtable3
( id number(10) primary key ,
name varchar2(10),
birthday date not null
)2.在建立好的表之後,也可以對錶進行新增或刪除約束,注意:約束是不能進行修改的,但是可以是約束有效化或者是無效化
1. 新增主鍵約束
alter table newtable3 add primary key(id);
2.新增唯一性約束:
alter table newtable3 add unique(name);
3.注意:新增非空約束(not null)時要使用modify語句,只能是非空約束(not null),其他的約束不能使用modify,因為語法特殊的問題
alter table newtable3 modify (birthday date not null);
4.刪除約束:直接用drop刪除不需要的約束即可
alter table newtable3 drop unique(name);
5.check約束:檢查資料是否滿足指定的條件
alter table newtable3 add check(name>0 and name<10);
如果超出了指定條件範圍,則會出錯
6.外來鍵約束: foreign key
create table category(
cid int primary key auto_increment,
cname varchar(10),
cdesc varchar(31)
);create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
pdate timestamp,
cno int
);給product中的這個cno 新增乙個外來鍵約束
alter table product add foreign key(cno) references category(cid);
二、主鍵、外來鍵和索引的區別
定義:主鍵--唯一標識一條記錄,不能有重複的,不允許為空
外來鍵--表的外來鍵是另一表的主鍵, 外來鍵可以有重複的, 可以是空值
索引--該欄位沒有重複值,但可以有乙個空值
作用:主鍵--用來保證資料完整性
外來鍵--用來和其他表建立聯絡用的
索引--是提高查詢排序的速度
個數:主鍵--主鍵只能有乙個
外來鍵--乙個表可以有多個外來鍵
索引--乙個表可以有多個唯一索引
建立sql的主鍵和外來鍵約束的方法:
create table student --建**式:create table 自定義的表名
( --欄位名一般為有一定意義的英文
studentname varchar2(15), -- 格式:欄位名型別()括號裡面的是允許輸入的長度
studentage int, --int型的後面不需要接長度
student*** varchar2(2) --最後乙個字段後面不要逗號
)--在建立表時就可以對欄位加上約束:
create table student
(studentno int primary key identity(1,1), --加主鍵約束,還有標識列屬性(兩者構成實體完整性)
studentname nvarchar(15) not null, --加非空約束,不加"not null" 預設為:可以為空
studentschool text(20) foreign key references schooltable(schoolname), --加外來鍵約束,格式:foreign key references 關聯的表名(欄位名)
studentage int default ((0)), --加預設值約束
student*** nvarchar(2) check(student***=n'男' or student***=n'女') --加檢查約束,格式:check (條件表示式)
)--如果在表建立好了以後再加約束,則格式分別為:
-- 主鍵:
alter table 表名
add constraint pk_欄位名--"pk"為主鍵的縮寫,欄位名為要在其上建立主鍵的欄位名,'pk_欄位名'就為約束名
primary key (欄位名) --欄位名同上
--唯一約束:
alter table 表名
add constraint uq_欄位名
unique (欄位名)
--外來鍵約束:
alter table 表名
add constraint fk_欄位名--"fk"為外來鍵的縮寫
foreign key (欄位名) references 關聯的表名(關聯的欄位名) --注意'關聯的表名'和'關聯的欄位名'
alter table 表a add constraint fk_b foreign key (ticket_no) references 表b(ticket_no)
alter table 表a add constraint fk_c foreign key (person_no) references 表c(person_no)
alter table 成績表 add constraint fk_studentno foreign key (studentno) references student (studentno)
on update cascade on delete cascade
級聯更新,級聯刪除,這樣在刪除主表student時,成績表中該學生的所有成績都會刪除。
--檢查約束:
alter table 表名
add constraint ck_欄位名
check (條件表示式) --條件表示式中的條件用關係運算子連線
--預設值約束:
alter table 表名
add constraint df_欄位名
default '預設值' for 欄位名--其中的'預設值'為你想要預設的值,注意'for'
--刪除建立的約束:
alter table 表名
drop constraint 約束名--約束名為你前面建立的如:pk_欄位這樣的約束名
--注意:如果約束是在建立表的時候建立的,則不能用命令刪除
--只能在'企業管理器'裡面刪除
中軟實訓總結 中軟實訓心得
在廈門中軟的乙個多月裡,在那裡學習的經歷讓我懷念,難忘,在那裡的每一天都會讓我成長。在中軟的實訓生活中,我深刻體會到了自己專業方面的欠缺和不足,也意識到了作為計算機網路工程專業的學生,要想在以後的職業中嶄露頭角,除了要有很好的專業知識,還必須具備良好的心理素質和善於交流溝通的能力,使自己在以後的途中...
中軟實訓總結 中軟實訓心得
中軟實訓心得 在廈門中軟的乙個多月裡,在那裡學習的經歷讓我懷念,難忘,在那裡的每一天都會讓我成長。在中軟的實訓生活中,我深刻體會到了自己專業方面的欠缺和不足,也意識到了作為計算機網路工程專業的學生,要想在以後的職業中嶄露頭角,除了要有很好的專業知識,還必須具備良好的心理素質和善於交流溝通的能力,使自...
中軟實訓總結 中軟實訓心得
在廈門中軟的乙個多月裡,在那裡學習的經歷讓我懷念,難忘,在那裡的每一天都會讓我成長。在中軟的實訓生活中,我深刻體會到了自己專業方面的欠缺和不足,也意識到了作為計算機網路工程專業的學生,要想在以後的職業中嶄露頭角,除了要有很好的專業知識,還必須具備良好的心理素質和善於交流溝通的能力,使自己在以後的途中...