數據庫完整性和約束


數據庫的完整性

數據庫約束是保證數據庫完整性的方法 ,數據庫完整性分為實體完整性、域完整性和參照完整性

實體完整性

實體完整性要求表中的主鍵字段不能為空且不能重復;

域完整性

域完整性要求表中數據都在有效范圍內;

參照完整性

參照完整性保證了相關聯的表的數據一致性;

約束的使用

約束是保證表中數據完整性和一致性的手段,分為主鍵約束外鍵約束檢查約束唯一約束非空約束五種;

主鍵約束

主鍵約束在每個數據表中只有一個,但主鍵約束可以有多個列組成;

-- 添加主鍵約束
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='用戶名';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM