--1. 建表的同時建立約束
create
table student_1(
stuid number(32)
primary
key,
--主鍵
stuname varchar2(16)
unique
,--唯一約束
age varchar2(4)
notnull
,--非空約束
gender varchar2(8)
check
(gender in
('男'
,'女'
,'保密'))
--檢查約束);
insert
into student_1 values(1
,'張三',22
,'男');
--插入資料,必須符合約束
insert
into student_1 values(2
,'李四',22
,'女');
--插入資料,必須符合約束
select
*from student_1;
--查詢
--主鍵約束
insert
into student_1 values(1
,'陳晨',21
,'男');
--插入資料,必須符合約束
--唯一約束
insert
into student_1 values(3
,'張三',21
,'男');
--插入資料,必須符合約束
--非空約束
insert
into student_1 values(3
,'陳晨'
,null
,'男');
--插入資料,必須符合約束
insert
into student_1 values(3
,'陳晨',''
,'男');
--插入資料,必須符合約束
--檢查約束
insert
into student_1 values(3
,'陳晨',21
,'妖怪');
--插入資料,必須符合約束
--2. 建表後建立約束
--建立學生表
create
table student (
stuid varchar2(7)
notnull
,--學號 學號=『s』+班號+2位序號
stuname varchar2(10)
notnull
,--姓名
gender varchar2(2)
notnull
,--性別
age number(2)
notnull
,--年齡
seat number(2)
notnull
,--座號
enrolldate date
,--入學時間
stuaddress varchar2(50)
default
'位址不詳'
,--住址
classno varchar2(4)
notnull
--班號 班號=學期序號+班級序號 );
--新增主鍵約束。constraint 關鍵字英文意思為約束、限制,pk_infos 為約束名稱(自定義),primary key 約束型別
alter
table student add
constraint pk_infos primary
key(stuid)
;alter
table student add
constraint ck_infos_gender check
(gender =
'男'or gender =
'女')
;--新增檢查約束,性別只能是男或者女
alter
table student add
constraint ck_infos_seat check
(seat >=
0and seat <=50)
;--新增檢查約束,坐位號只能在 [0,50] 之間
alter
table student add
constraint ck_infos_age check
(age >=
0and age<=
100)
;--與上同理
--新增檢查約束,限制班號範圍
alter
table student add
constraint ck_infos_classno check
((classno >=
'1001'
and classno<=
'1999')or
(classno >=
'2001'
and classno<=
'2999'))
alter
table student add constraints un_stuname unique
(stuname)
;--新增唯一約束,姓名不能重複
--為 student 表的 新增非空約束,先新增一列「備註」
alter
table student add
(scomment varchar(20
));select
*from student;
--因為 not null 約束型別必須宣告在列上,無法宣告在表上,所以必須用 modify 方式來寫
alter
table student modify stuaddress not
null
;--刪除 student 表的 stuaddress 列的非空約束
alter
table student modify stuaddress null;/*
外來鍵約束時另一張表被引用的列必須是主鍵 或 unique 約束
*/--建立商品型別表。商品型別與商品 1 對多 關係,商品依賴型別表,型別表為主表,商品為從表
create
table producttype(
pid number(32)
primary
key,
pname varchar2(16)
notnull);
--建立商品表。建表的同時設定外來鍵
create
table product(
pid number(32)
primary
key,
pname varchar2(16)
notnull
, price number(8,
2)notnull
,--**
ptid number(32)
references producttype(pid)
--設定外來鍵,關聯型別表的主鍵);
--如果建表的時候沒有設定外來鍵,則修改表,為其新增外來鍵。預設情況下,當主表記錄被從表依賴時,主表記錄無法刪除,除非先刪除依賴項
alter
table product add constraints fk_ptid foreign
key(ptid)
references producttype(pid)
;alter
table product add constraints fk_ptid foreign
key(ptid)
references producttype(pid)
ondelete
cascade
;--檢視外來鍵名稱後刪除外來鍵
alter
table product drop constraints sys_c0011423;
--插入資料
insert
into producttype values(1
,'it');
insert
into producttype values(2
,'書籍');
insert
into producttype values(3
,'美食');
select
*from producttype;
insert
into product values(1
,'天龍八部'
,35.55,2
);insert
into product values(2
,'螞蟻上樹'
,66.55,3
);select
*from product;
delete
from producttype where pid =1;
--正常刪除,因為 pid =1 沒有被任何記錄依賴
--如果依賴自己的外來鍵沒有設定級聯刪除,則這裡無法刪除自己,報錯:違反完整約束條件,已找到子記錄。除非先刪除所有依賴的子記錄,否則只能強制刪除(不建議)
--如果依賴自己的外來鍵設定了級聯刪除,則會一併刪除
delete
from producttype where pid =
2or pid =3;
select
*from tab;
drop
table product;
oracle建立表 約束
圖書資訊表 圖書編號,圖書名稱,出版社,出版日期,圖書 圖書作者,借出標識,讀者編號,描述 主鍵 constraint pk name primary key 外來鍵 constraint fk name foreign key column name reference table name co...
Oracle 設定表約束
約束 constraint 約束是表級的強制規定。有以下五種約束 not null 非空 只能是列級約束 unique unique 唯一約束 primary key primary key 主鍵約束 foreign key foreign key 外來鍵約束 check check 檢查約束列級約...
Oracle中的建表約束
約束是表一級的限制 如果存在依賴關係,約束可以防止錯誤的刪除資料 約束的型別 not null unique primary key foreign key check 使用者可以自定義約束,也可以使用oracle server的sys cn格式命名約束 約束建立的時機 建立表的時候,同時建立約束 ...