數據庫的完整性
數據庫約束是保證數據庫完整性的方法 ,數據庫完整性分為實體完整性、域完整性和參照完整性
實體完整性
實體完整性要求表中的主鍵字段不能為空且不能重復;
域完整性
域完整性要求表中數據都在有效范圍內;
參照完整性
參照完整性保證了相關聯的表的數據一致性;
約束的使用
約束是保證表中數據完整性和一致性的手段,分為主鍵約束、外鍵約束、檢查約束、唯一約束、非空約束五種;
主鍵約束
主鍵約束在每個數據表中只有一個,但主鍵約束可以有多個列組成;
-- 添加主鍵約束
alter table table_name add constraints constraint_name primary key(column_name);
-- 移除主鍵約束
alter table table_name drop constraint constraint_name;
-- 創建表時添加主鍵
primary key(column_name)
外鍵約束
外鍵約束是保證使用外鍵的數據列與主鍵約束的數據列一致,可以有多個外鍵;
-- 創建表時添加外鍵約束, on delete cascade 代表級聯刪除
constraint constraint_name foregn key(column_name) reference table_name(column_name)
on delete cascade;
-- 添加外鍵約束
alter table table_name add constraint constraint_name foregn key(column_name)
reference table_name(column_name) on delete cascade;
-- 移除外鍵約束
alter table table_name drop constraint constraint_name
檢查約束
檢查約束是保證列數據的正確性
-- 添加檢查約束
alter table table_name add constraint constraint_name check(condition)
condition位檢查條件,比如限定年齡在18-25 condition就為 age>18 and age<25
唯一約束
唯一約束保證了列上的數據唯一性,與主鍵約束類似但是唯一約束可以有多個
-- 添加檢查約束
alter table table_name add constraint constraint_name unique(condition)
非空約束
非空約束保證列上必須有值
alter table table_name modify column_name not null
練習
-- system 用戶
-- 授權/回收用戶Flynn 創建表權限
grant create table to flynn;
revoke create table from flynn;
-- flynn 用戶
-- 創建t_user表
create table t_user(
u_name char(10) not null,
u_age number(5) not null,
U_password varchar(20) not null
);
-- 添加主鍵約束
alter table t_user add constraints pk_uname primary key(u_name);
-- 移除主鍵約束
alter table t_user drop constraint pk_uname;
select * from t_user;
-- 查詢一個用戶擁有的對象權限
select * from dba_tab_privs where grantee='用戶名';
-- 查詢一個用戶擁有的系統權限
select * from dba_sys_privs where grantee='用戶名';