DDL資料庫對象管理 約束的分類: 主鍵約束:primary key 要求主鍵列數據唯一,並且不允許為空。 外鍵約束:foreign key 用於在兩表之間建立關係,需要指定引用主表的哪一列。 檢查約束:check 某列取值範圍限制、格式限制等。 例如性別列 唯一約束:unique 數據的唯一性,可 ...
DDL資料庫對象管理
約束的分類:
主鍵約束:primary key 要求主鍵列數據唯一,並且不允許為空。
外鍵約束:foreign key 用於在兩表之間建立關係,需要指定引用主表的哪一列。
檢查約束:check 某列取值範圍限制、格式限制等。 例如性別列
唯一約束:unique 數據的唯一性,可以空,但只能有一個
非空約束:not null 該列數據不能為空
註意:1.not null 約束只能在列級上定義。
2. 外鍵需要關聯主鍵表的主鍵列或唯一列,這裡關聯唯一列
3. 創建外鍵表時:先創建主鍵表,在創建外鍵 。刪除表時:先刪除外鍵表,在刪除主鍵表
1.創建表格
-- Create table 表格名稱(列名 數據類型 約束 ,列名 數據類型 ,約束);
create table cla
(
clano number,
claid nvarchar2(20),
claname nvarchar2(20)
);
--在創建完列後,同時創建約束(列級約束)
例如:
create table T1(
id number constraint PK_T1 primary key, -- 聲明約束可以使用constraint PK_T1指定約束名
NAME VARCHAR(20) constraint UN_T1_NAME unique NOT NULL, -- 唯一和非空
SEX CHAR(2) constraint CK_T1_SEX CHECK( SEX IN ('男','女')),
tid number constraint FK_T1_T references T(id)
);
--在創建完表格列後,在列下麵創建約束(表級約束)
例如:
create table T2(
id number ,
NAME VARCHAR(20) not null, -- not null 只能定義在列的後面,稱為列級約束
SEX CHAR(2),
tid number ,
constraint PK_T2 primary key(id), ---先定義列後編寫的約束稱為表級約束;
constraint UN_T2_NAME unique(name) ,
constraint CK_T2_SEX CHECK( SEX IN ('男','女')),
constraint FK_T2_T foreign key (tid) references T(id) -- 在表格後指定外鍵列時需要使用 foreign key指定外鍵列
);
--聯合主鍵,聯合唯一
create table T3(
ID NUMBER ,
SID NUMBER ,
NAME NVARCHAR2(20),
NAME2 NVARCHAR2(20),
constraint PK_T3 PRIMARY KEY(ID,SID), -- 聯合主鍵
CONSTRAINT UN_T3_NAME_NAME2 UNIQUE(NAME,NAME2) -- 聯合唯一
);
2.修改表格
--修改表格之添加主鍵,唯一約束,外鍵約束,檢查約束
例如:
1.alter table cla add constraint PK_CLA primary key (CLANO);
2.alter table cla add constraint UN_CLA_CLAID unique (CLAID);
3.alter table STU add constraint FK_STU_CLA foreign key (CLASSID) references cla (CLANO);
4.alter table STU add constraint CK_STU_SEX check (sex in ('男','女'));
3.刪除表格
語法: drop table 表格名稱
註意:刪除主鍵表前,需要先刪除外鍵表上的引用關係
drop table cla2;
4. 查詢表格 (不屬於DDL)-----
select table_name from user_tables;
補充:
1 . references 和 reference 的區別
references 可以在定義列的同時引用主鍵表;reference不可以
2. 聲明約束可以使用constraint PK_T1指定約束名
3. 外鍵需要關聯主鍵表的主鍵列或唯一列
4.如果沒有聲明約束或指定約束名稱,則系統會預設生成一個名稱