注:
所有的下劃線+斜體語句都是非必須語句
靜態約束:
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 年出生的所有學生,並將...