約束(constraint)就是管理如何插入或處理資料庫資料的規則。dbms通過在資料庫表上施加約束來實施引用完整性。
1.1 主鍵
主鍵是一種特殊的約束,用來保證一列(或一組列)中的值是唯一的,而且永不改動。
列應用於主鍵的條件:
我們可以在建立列的時候這樣定義主鍵:
1create
table
vendors 2(
3 vend_id char(10) not
null
primary
key,
4 vend_name char(50) not
null
,5 vend_address char(50) null
,6 vend_city char(50) null
,7 vend_state char(5) null
,8 vend_zip char(10) null
,9 vend_country char(50) null
10 );
或者在建立表之後在新增主鍵:
1alter
table
vendors
2add
constraint
primary
key (vend_id);
1.2 外來鍵
外來鍵是表中的一列,其值必須列在另一表的主鍵中。在建立表的時候可以同時這樣定義外來鍵:
1create
table
orders2(
3 order_num integer
notnull
primary
key,
4 order_date datetime
notnull
,5 cust_id char(10) not
null
references
customers(cust_id)
6 );
在建立表之後還可以使用alter table
語句中用constraint
語法新增外來鍵:
1alter
table
orders
2add
constraint
3foreign
key (cust_id) references customers (cust_id)
除幫助保證引用完整性外,外來鍵還有另乙個重要作用。在定義外來鍵後,dbms不允許刪除在另乙個表中具有關聯行的行。1.3 唯一約束
唯一約束用來保證一列(或一組列)中的資料是唯一的。唯一約束類似於主鍵,但是二者並不相同:
語法
唯一約束的語法類似於其他約束的語法。唯一約束既可以用unique關鍵字在表定義中定義,也可以用單獨的constraint定義
1.4 檢查約束
檢查約束用來保證一列(或一組列)中的資料滿足一組指定的條件。
檢測約束的主要作用有:
下面的例子,通過新增約束,任何插入(或更新)這個表中的行都會被檢查,保證quantity大於0:
1create
table
orderitems2(
3 order_num integer
notnull
,4 order_item integer
notnull
,5 prod_id char(10) not
null
,6 quantity integer
notnull
check (quantity >0),
7 item_price money
notnull
8 );
索引用來排序資料以加快搜尋和排序操作的速度。
使用索引的注意事項:
索引改善檢索操作的效能,但降低了資料插入、修改和刪除的效能。在執行這些操作時,dbms必須動態地更新索引。
索引資料可能要占用大量的儲存空間。
並非所有資料都適合做索引。取值不多的資料(如州)不如具有更多可能值的資料(如姓或名),能通過索引得到那麼多的好處。
索引用於資料過濾和資料排序。如果你經常以某種特定的順序排序資料,則該資料可能適合做索引。
可以在索引中定義多個列(例如,州加上城市)。這樣的索引僅在以州加城市的順序排序時有用。如果想按城市排序,則這種索引沒有用處。
建立索引
索引用create index語句建立(不同dbms建立索引的語句變化很大),且索引必須唯一命名。下面的例子是在products
表的pro_name
列上建立名為:prod_name_ind
的索引:
1create
index
prod_name_ind
2on products (prod_name);
索引的效率隨錶資料的增加或改變而變化。許多資料庫管理員發現,過去建立的某個理想的索引經過幾個月的資料處理後可能變得不再理想了。最好定期檢查索引,並根據需要對索引進行調整。觸發器的特點
觸發器的作用
建立觸發器下面的例子建立乙個觸發器,它對所有insert和update操作,將customers表中的cust_state列轉換為大寫:
1create
trigger
customer_state2on
customers
3for
insert, update4as
5update
customers
6set cust_state =
upper
(cust_state)
7where customers.cust_id = inserted.cust_id;
一般來說,約束的處理比觸發器快,因此在可能的時候,應該盡量使用約束。任何安全系統的基礎都是使用者授權和身份確認。這是一種處理,通過這種處理對使用者進行確認,保證他是有權使用者,允許執行他要執行的操作。包含資料庫安全的操作有:
安全性使用sql的grant和revoke語句來管理,不過,大多數dbms提供了互動式的管理實用程式,這些實用程式在內部使用grant和revoke語句。
SQL 必知必會 筆記 20 高階SQL特性
約束 constraint 就是管理如何插入或處理資料庫資料的規則。dbms通過在資料庫表上施加約束來實施引用完整性。1.1 主鍵 主鍵是一種特殊的約束,用來保證一列 或一組列 中的值是唯一的,而且永不改動。列應用於主鍵的條件 我們可以在建立列的時候這樣定義主鍵 1 create table ven...
《sql必知必會》筆記
資料庫 儲存有組織的資料的容器 通常是乙個檔案或一組檔案 注意誤用混淆 資料庫軟體被稱為dbms,資料庫是通過dbms建立和操縱的容器 模式 關於資料庫和表的布局及特性的資訊。主鍵 一列或一組列,其值能夠唯一標識表中的每一行。多條sql語句必須以 分隔。sql語句不區分大小寫,select和sele...
SQL必知必會
資料庫 儲存有組織的資料的容器。資料庫管理系統 dbms 資料庫軟體,資料庫是通過dbms建立和操縱的容器。表 某種特定資料型別的結構化清單。資料庫中的每個表都有自己的名字,且唯一。不同的資料庫可以使用相同的表名。表的特性 模式 資料在表中如何儲存,儲存什麼樣的資料,資料如何分解。模式可以用來描述資...