1樓:
1. sql的主鍵和外來鍵的作用:
2.外來鍵取值規則:空值或參照的主鍵值。
(1)插入非空值時,如果主鍵表中沒有這個值,則不能插入。
(2)更新時,不能改為主鍵表中沒有的值。
(3)刪除主鍵表記錄時,你可以在建外來鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。
(4)更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。
3.簡而言之,sql的主鍵和外來鍵就是起約束作用。
4.完成外來鍵自動填充主鍵的值,可以使用觸發器,或在插入資料的時候填入;
觸發器是在對錶進行增、刪、改時,自動執行的儲存過程。觸發器常用於強制業務規則, 它是一種高階約束,通過事件進行觸發而被執行。
5.使用t-sql語句來建立觸發器
基本語句如下:
create trigger trigger_nameon
[ insert, update,delete ]as sql_statement
6.在插入資料的時候,直接把主鍵資料賦給外來鍵欄位。
2樓:薪釋
在定義外來鍵的的時候,將其設定為級連(cascade)操作,以保證參照完整性。如在sc表中定義外來鍵:
foreign key(cno) references course(cno)
on update cascade /* 當更新course表中的cno時,級連更新sc表中相應的元組*/
on delete cascade, /* 當刪除course表中的cno時,級連刪除sc表中相應的元組*/
因為預設是no action,即拒絕執行操作,所以需要顯示地寫出cascade
資料庫表中的主鍵和外來鍵如何關聯?
3樓:扈琇保瀚
主鍵:[編輯本段]概念
主關鍵字(主鍵,primarykey)是被挑選出來,作表的行的惟一標識的候選關鍵字。一個表只有一個主關鍵字。主關鍵字又可以稱為主鍵。
主鍵可以由一個欄位,也可以由多個欄位組成,分別成為單欄位主鍵或多欄位主鍵。
[編輯本段]作用
:1)保證實體的完整性;
2)加快資料庫的操作速度
3)在表中新增新記錄時,access會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重複。
4)access自動按主鍵值的順序顯示錶中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示錶中的記錄。
[編輯本段]特點
1)一個表中只能有一個主鍵。如果在其他欄位上建立主鍵,則原來的主鍵就會取消。在access中,雖然主鍵不是必需的,但最好為每個表都設定一個主鍵。
2)主鍵的值不可重複,也不可為空(null)。
外來鍵:如果公共關鍵字在一個關係中是主關鍵字,那麼這個公共關鍵字被稱為另一個關係的外來鍵。由此可見,外來鍵表示了兩個關係之間的聯絡。
以另一個關係的外來鍵作主關鍵字的表被稱為主表,具有此外來鍵的表被稱為主表的從表。外來鍵又稱作外關鍵字。
以上是摘抄的,簡單來說,主鍵就是一個關係中作為標識用的,而外來鍵是其他關係中的屬性,使用外來鍵可避免冗餘。
4樓:北桓崴
它們都是關聯式資料庫表設計的約束方式而已,為了保證資料庫中不會出現髒資料的限制方法。
主鍵是資料庫表的唯一索引序列,可以由多個欄位組成,但每條資料的這幾個欄位的組合必須唯一;主鍵約束僅涉及本表資料;
外來鍵是本表中該外來鍵欄位的取值要求是已經在目標表中存在的資料;假如說,表b有欄位b_1是表a中欄位a_1的外來鍵,那麼插入表b資料的時候,欄位b_1的取值要求在表a的欄位a_1的當前所有資料的值的範圍內。外來鍵是以外表資料約束本表資料的約束條件。
此外,外來鍵還有個要求,就是a_1必須是表a的主鍵。並且必須說得是,外來鍵是一個很煩人的資料庫約束。
5樓:匿名使用者
主外來鍵的存在是依託兩個實體之間的關係而存在的;
比如班級與學生的關係:
一個班級可以有多個學生,並且一個學生只能屬於一個班級,這就是一對多的關係;
那麼設計資料庫的時候就應該在學生表記憶體放班級的id作為外來鍵,為什麼不在班級表內放學生呢?
因為,你想一想班級表內如果放學生那麼記錄可能就是這樣:
1班id 1班 xx同學id
1班id 1班 xx同學id
..這是不允許的,班級表內班級為主鍵,是唯一的不允許相同記錄的;
下面簡單給你講下大概建成的表結構
--建班級表
create table class(
classid int primary key,--定義班級id為主鍵
classname varchar(15)
)--建學生表
create table students(
studentid int primary key,--定義學生id為主鍵
classid int ,--外來鍵值,跟班級表classid 屬性型別相同
stuname varchar(20),--學生姓名
---定義外來鍵
foreign key(classid) references class(classid) --本表classid是基於class表classid的外來鍵
)---------
如上定義了主外來鍵後,兩個表間的關係就是一對多的關係了,並且學生表內的classid必須依託班級表的classid存在,也就是說外來鍵必須要主鍵存在的時候才能建立,例如:
--在班級表為空的情況往學生表插入一條記錄是不允許的:
insert into students(studentid,classid,stuname)values(1,1,'小明')
系統會丟擲異常提示主鍵表班級表內班級id不存在這樣是不允許插入的;
必須要先往班級表內插入一條記錄:
insert into class(classid,classname)values(1,'一班')
後才能執行插入前面一條往學生表插入資訊的語句..
--------------可瞭解一些了?真累啊.
資料庫中什麼是主鍵,什麼是外來鍵
6樓:四舍**入
主鍵(primary key): 也稱為主碼或主關鍵字,用於惟一地確定一個元組的屬性或屬性組(複合主碼)。每個關係都有一個並且只有一個主碼。
外來鍵(foreign key):也稱為外碼或外部關鍵字。如果一個屬性集不是所在關係的關鍵字,但是是其他關係的關鍵字,則該屬性集稱為外部關鍵字。
在關聯式資料庫中可以通過外來鍵使兩個關係關聯,這種聯絡通常是一對多(1:n)的,其中主(父)關係(1方)稱為被參照關係,從(子)關係(n方)稱為參照關係。
7樓:愛可生雲資料庫
外來鍵的設計初衷是為了在資料庫端保證對邏輯上相關聯的表資料在操作上的一致性與完整性。
優點:精簡關聯資料,減少資料冗餘
避免後期對大量冗餘處理的額外運維操作。
降低應用**複雜性,減少了額外的異常處理
相關資料管理全由資料庫端處理。
增加文件的可讀性
特別是在表設計開始,繪製 er 圖的時候,邏輯簡單明瞭,可讀性非常強。
缺點:效能壓力
外來鍵一般會存在級聯功能,級聯更新,級聯刪除等等。在海量資料場景,造成很大的效能壓力。比如插入一條新記錄,如果插入記錄的表有 10 個外來鍵,那勢必要對關聯的 10 張表逐一檢查插入的記錄是否合理,延誤了正常插入的記錄時間。
並且父表的更新會連帶子表加上相關的鎖。
其他功能的靈活性不佳
比如,表結構的更新等。
8樓:匿名使用者
主外來鍵的存在是依託兩個實體之間的關係而存在的;
比如班級與學生的關係:
一個班級可以有多個學生,並且一個學生只能屬於一個班級,這就是一對多的關係;
那麼設計資料庫的時候就應該在學生表記憶體放班級的id作為外來鍵,為什麼不在班級表內放學生呢?
因為,你想一想班級表內如果放學生那麼記錄可能就是這樣:
1班id 1班 xx同學id
1班id 1班 xx同學id
..這是不允許的,班級表內班級為主鍵,是唯一的不允許相同記錄的;
下面簡單給你講下大概建成的表結構
--建班級表
create table class(
classid int primary key,--定義班級id為主鍵
classname varchar(15)
)--建學生表
create table students(
studentid int primary key,--定義學生id為主鍵
classid int ,--外來鍵值,跟班級表classid 屬性型別相同
stuname varchar(20),--學生姓名
---定義外來鍵
foreign key(classid) references class(classid) --本表classid是基於class表classid的外來鍵
)---------
如上定義了主外來鍵後,兩個表間的關係就是一對多的關係了,並且學生表內的classid必須依託班級表的classid存在,也就是說外來鍵必須要主鍵存在的時候才能建立,例如:
--在班級表為空的情況往學生表插入一條記錄是不允許的:
insert into students(studentid,classid,stuname)values(1,1,'小明')
系統會丟擲異常提示主鍵表班級表內班級id不存在這樣是不允許插入的;
必須要先往班級表內插入一條記錄:
insert into class(classid,classname)values(1,'一班')
後才能執行插入前面一條往學生表插入資訊的語句..
--------------可瞭解一些了?真累啊.
9樓:北桓崴
它們都是關聯式資料庫表設計的約束方式而已,為了保證資料庫中不會出現髒資料的限制方法。
主鍵是資料庫表的唯一索引序列,可以由多個欄位組成,但每條資料的這幾個欄位的組合必須唯一;主鍵約束僅涉及本表資料;
外來鍵是本表中該外來鍵欄位的取值要求是已經在目標表中存在的資料;假如說,表b有欄位b_1是表a中欄位a_1的外來鍵,那麼插入表b資料的時候,欄位b_1的取值要求在表a的欄位a_1的當前所有資料的值的範圍內。外來鍵是以外表資料約束本表資料的約束條件。
此外,外來鍵還有個要求,就是a_1必須是表a的主鍵。並且必須說得是,外來鍵是一個很煩人的資料庫約束。
10樓:小山山
一般每個表建議都有主鍵,比如表a和表b,
a的列式(aid,aa,bb,cc),其中aid就是主鍵,然後b是(bid,xx,yy,ab)bid為主鍵,ab是外來鍵對應a表的aid
然後你要是,然後你要查詢a表中的,aa,bb及b表中的xx,yy,且要是的b中xx,yy所在列的ab要等於a表中的aid,
然後即可以這樣寫select ..... from a a,b b where b.ab=a.aid
外來鍵差不多就是這樣的,設定好b中的外來鍵後,此ab的值只能是a中aid範圍內的值,不能搞一個aid中都沒有的值
資料庫表中的主鍵和外來鍵如何關聯
扈琇保瀚 主鍵 編輯本段 概念 主關鍵字 主鍵,primarykey 是被挑選出來,作表的行的惟一標識的候選關鍵字。一個表只有一個主關鍵字。主關鍵字又可以稱為主鍵。主鍵可以由一個欄位,也可以由多個欄位組成,分別成為單欄位主鍵或多欄位主鍵。編輯本段 作用 1 保證實體的完整性 2 加快資料庫的操作速度...
sql資料庫兩個外來鍵做聯合主鍵
聯合主鍵是有著特殊的需求的。建表的時候建立 create table 表名 欄位名1 int not null,欄位名2 nvarchar 13 not null primary key 欄位名1,欄位名2 欄位名3 欄位名n 或者建表之後修改表結構 alter table 表名 with noch...
資料庫的兩個表通過主鍵和外來鍵相關聯如果修改其中表的資料會不會自動修改另表的資料啊
現有倆表a,b,a表有主鍵,b表建立外來鍵關聯到a表修改a表,若修改之後的結果是b表外來鍵欄位的值在a表中找不到了,則會報錯,不允許進行此修改,其他情況可以任意修改。修改b表,必須保證修改後b表外來鍵欄位的值依然能在a表中找到,否則會報錯。倆表自己的修改,只會影響自己表的資料,對其他表無影響。 灝忓...