利用SQL語言實現資料庫的靜態完整性

2021-08-19 16:40:00 字數 1806 閱讀 9798

注:

所有的下劃線+斜體語句都是非必須語句

靜態約束:

col_constr 列約束/table_constr 表約束:

建立表時增加約束:create table 表名(列名1 not null 

unique

或 primary key

或 check (表示式)

或 ( 

references 表名(列名) on delete cascade

或set null

)列名2 約束……)

例子:建立乙個學生表,性別要檢查只能是"男"或"女",歲數要檢查是否在[1, 149]範圍內,dt作為表dept的外來鍵,如果dept中dt被 學校開除,則該學生表中所有與dt相關的元組全部一併刪除

create table stpudent(st char(8) not null unique, sname char(10),

s*** char(2), check(s***='男' or s***='女'),

sage integer check (sage>=1 and sage<150),

dt char(2) references dept(dt) on delete cascade,

sclass char(6));

建立表後增加約束:

alter table 表名 add constraint 約束名 約束……

注意建立表後增加的約束如果是級聯更新,那麼必須在語句"

references infer(st) …"前加上"

foreign key(st)"宣告外來鍵

建立表後刪除約束:alter table 表名 drop constraint 約束名 約束……

注意mysql可能不支援上述語句,並且mysql也不支援check(),只不過可以執行

同理mysql只能刪除外來鍵約束和主鍵約束

例子:

alter table sc

add constraint yueshu1 unique(st);

alter table sc

add constraint yueshu2 check(ct='001' or ct='002' or ct='003' or ct='004' or ct='005');

alter table infer

add constraint yueshu3 unique(st);

alter table infer

add constraint yueshu4 check(ct='001' or ct='002' or ct='003' or ct='004' or ct='005');

alter table sc

add constraint yueshu5 foreign key(st) references infer(st) on delete cascade;

注意:

check 中的條件可以是select-from-where 內任何where後的語句,包含子查詢,例如:

選課表中的課程必須在課程表裡有,學生必須在學號名單裡面有

create table sc(st char(8) check(st in (select st from student)),

ct char(3) check( ct in (select ct from course)),

score float(1), constraint ctscore check (score>=0.0 and

score<=100.0))

斷言:

利用SQL語言建立資料庫

1.建立資料庫 create database 2.建立db中的table 定義關係模式 create table 3.定義table及其各個屬性的約束條件 定義完整性 4.定義view 定義外模式及e c映像 5.定義index,tablespace等 物理儲存引數 6.上述定義的撤銷和修正 語法...

利用SQL語言實現關係代數操作

目錄 1.並交差的處理 2.舉例 3.空值的處理 4.內連線和外連線 1.並 交 差 1 sql語言 union,intersect,except 2 語法格式 子查詢1 通常情況下自動刪除重複元組,不帶all 若要保留重複元組,則要帶 all 3 假設子查詢1 的乙個元組出現 m 次,子查詢2 的...

資料庫執行SQL語言實現查詢功能的方法

一 首先建立了三個關係 table 分別存放以下資訊 student 一部分 score 一部分 course 一部分 二 結合具體問題執行資料庫的sql語言,實現查詢的功能,先是詳細的查詢問題實踐,後面是關於查詢的我所總結的知識點 1 從 student 表中查詢 1994 年出生的所有學生,並將...