Oracle之表的約束

2021-10-06 15:23:32 字數 4741 閱讀 7362

--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格式命名約束 約束建立的時機 建立表的時候,同時建立約束 ...