SQL課堂筆記<2>

2.1 理論 數據結構和形式化定義

1 笛卡爾積

2 候選碼和主碼的關係:

一個關係/表中只要能唯一標識一個記錄的屬性列都可以作爲候選碼,如學生表中的學號,身份證號,手機號
從候選碼中選一個特殊作爲主碼PK, 一個關係表中只有一個PK.
如性別,生日一般叫非主屬性

3 基本表:數據庫的物理表叫基本表.

由基本表查詢出來的結果—視圖,是臨時表,不以獨立存在的,它依賴於基本表存在.
P43 關係操作
最簡單的分類: 數據定義,數據查詢,數據非查詢
數據定義:定義表結構頭 (create table ; alter table….)
數據查詢: select 字句特別多 ( query( )
數據非查詢: 插入記錄 insert into ; update ; delete from (noquery( ))

還有分類:

關係運算三大類: 選擇,連接,投影

(1)選擇: 根據條件從表中查出部分滿足條件的記錄

select * from 學生表 where 性別=’男’
select * from 學生表 where 性別=’男’ and LEFT(姓名,1)=’李’
(2)連接: 兩個或多表同時在邏輯上列向合併.
select 學生表.學號,姓名,課程號,成績
from 學生表, 成績表 where 學生表.學號=成績表.學號
(3)投影: 從表中選出部分列查詢結果.
上例中: 學生表.學號,姓名,課程號,成績

P45 完整性

許多表的結束應該是表頭定義時完成的,當表內有大量記錄內容時,是無法再增加部分新的約束的.
實際解決辦法: select * into 學生表tmp from 學生表
//把原表中數據倒入另一個表,再刪除原表的一些結束,再給原表增加新的約束,再從新表倒數據回來
—如果表XX不存在
SELECT * INTO XX FROM YY WHERE 條件
//—–
1 實體完整性:如學號爲主碼,且不能爲空
2 參照完整性:如學生表(父表)按學號與成績表(子表)建立參照完整性. 以後在增加新數據時,只有學生表已經存在的學號的學生的數據纔有插入到成績表中.
主鍵,外鍵: 在學生表中學號是主鍵,在成績表中學號不是主鍵,立足於成績表時,我們說學號是學生表的外鍵FK(這樣約束後,成績表的學號必須事先已經在學生表中存在)
3自定義完整性 人爲加check (條件)
應用:
(1)定義新表的同時定義約束
Create table xs(學號 nchar(8) not null primary key,
性別 not null default ‘男’ check (性別=’男’ or 性別=’女’ ),
年齡 tinyint check(年齡 between 15 and 30),
)
例:
Create table xs(學號 nchar(8) not null primary key,
性別 nchar(1) not null default ‘男’ check (性別=’男’ or 性別=’女’),
年齡 tinyint check(年齡 between 15 and 30)
)
create table cj(
學號 nchar(8),
課程號 nchar(10),
成績 tinyint,
foreign key(學號) references xs(學號)
)
補:自定義結束時,可以針對每列單獨約束(列級約束),也可以統一對所有列約束(元組級約束)
如: Create table xs(學號 nchar(8) not null primary key,
性別 nchar(1) not null default ‘男’ ,
年齡 tinyint ,
check ((性別=’男’ or 性別=’女’) and (年齡 between 15 and 30))
)
此法的約束檢查發生在完成一行數據結束後.而上面的列級約束查檢是發生當列完成數據錄入時.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章