sql數(shù)據(jù)庫外鍵怎么寫 如何設(shè)置數(shù)據(jù)庫中的外鍵?
如何設(shè)置數(shù)據(jù)庫中的外鍵?有外鍵的情況應(yīng)該先添加主表數(shù)據(jù),再添加副表數(shù)據(jù)。如:有以下兩張表班級表:CLASSID NAME1 一班2 二班學(xué)生表
如何設(shè)置數(shù)據(jù)庫中的外鍵?
有外鍵的情況應(yīng)該先添加主表數(shù)據(jù),再添加副表數(shù)據(jù)。
如:有以下兩張表
班級表:
CLASSID NAME
1 一班
2 二班
學(xué)生表:
SID NAME CLASSID
1 張三 1
2 李四 1
3 王五 2
其中學(xué)生表中的CLASSID是班級表CLASSID的外鍵。
現(xiàn)在要求在學(xué)生表中添加一條SID=4,NAME=趙六,CLASSID=3的數(shù)據(jù),那么只能先在班級表中加入一條新數(shù)據(jù)。
insert into 班級表 values (3,"三班")
然后再在學(xué)生表中添加:
insert into 學(xué)生表 values (4,"趙六",3)
數(shù)據(jù)庫表中什么是外健,外鍵的作用?
舉個例子:
student表是學(xué)生表 里面有字段:學(xué)號和姓名 學(xué)號是主鍵
sc表是成績表 里面有字段:學(xué)號和學(xué)科號 還有成績 這里面的學(xué)號就是外鍵,關(guān)聯(lián)著 student表的主鍵學(xué)號
簡單來說:一個表的外鍵關(guān)聯(lián)著 另外一個表的主鍵
外鍵的作用 保持?jǐn)?shù)據(jù)完整性 .......
拿上面的例子說:如果學(xué)生表 學(xué)號為1的記錄刪除了 ,那成績表sc里面對應(yīng)有學(xué)號為1的記錄 是不是應(yīng)該也刪除呢? 所以一般設(shè)置級聯(lián)刪除 這樣刪除了主鍵 外鍵的值跟著刪除。。。
數(shù)據(jù)庫語句怎么加外鍵?
1、以具有 DBA 權(quán)限的用戶身份連接到數(shù)據(jù)庫,執(zhí)行 ALTER TABLE 語句,將表定義更新為包括外鍵定義。創(chuàng)建一個名為 Skills 的表,其中包含潛在技能列表,然后創(chuàng)建一個與 Skills 表具有外鍵關(guān)系、名為 EmployeeSkills 的表。
2、也可以在創(chuàng)建完表后使用 ALTER TABLE 語句將外鍵添加到該表。在下例中,將創(chuàng)建與上例中類似的表,唯一不同之處是在創(chuàng)建表后再添加外鍵。
3、可以在創(chuàng)建外鍵時指定外鍵的屬性。例如,以下語句將創(chuàng)建與示例 2 中相同的外鍵,但它將外鍵定義為 NOT NULL,同時定義更新或刪除時的限制。
數(shù)據(jù)庫該不該用外鍵?
用外鍵的原因,是作為約束條件,避免錯誤數(shù)據(jù)插入,屬于一致性的范疇。
不用的原因,是在超大數(shù)據(jù)集下,大批量的插入在外鍵約束下會很慢,傳統(tǒng)數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)的時候,一般都建議關(guān)閉外鍵。若在互聯(lián)網(wǎng)場景下,數(shù)據(jù)庫表橫向拆分后,事實(shí)上數(shù)據(jù)庫端已經(jīng)做不到執(zhí)行外鍵約束,比如主表已經(jīng)拆分到不同實(shí)例中去了的情況。刪除問題上,這點(diǎn)本身就是需要接受的,操作代價無法避免,比如分庫分表要求的數(shù)據(jù)冗余,如果要刪除,只能通過多次的刪除搞,這點(diǎn)是對分布式事務(wù)的要求,單機(jī)是無法做到的,只能在程序端控制。所以,不提前提條件和場景,單說啥需要或者不需要的,都是偽科學(xué)。數(shù)據(jù)庫外鍵怎么設(shè)置???
1> -- 創(chuàng)建測試主表. ID 是主鍵.2> CREATE TABLE test_main (3> id INT,4> value VARCHAR(10),5> PRIMARY KEY(id)6> )7> go-- 建表時設(shè)置外鍵1> CREATE TABLE test_sub (2> id INT,3> main_id INT,4> value VARCHAR(10),5> PRIMARY KEY(id),6> FOREIGN KEY (main_id) REFERENCES test_main7> )8> go