新聞中心
在數(shù)據(jù)庫設(shè)計中,主鍵和外鍵都是非常重要的概念,它們不僅可以保證數(shù)據(jù)的一致性和完整性,還可以優(yōu)化數(shù)據(jù)庫的性能。本文將簡單介紹主鍵和外鍵的概念、作用和應(yīng)用。

為金壇等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及金壇網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站設(shè)計、金壇網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
一、 主鍵
主鍵是一種用于唯一標(biāo)識數(shù)據(jù)庫表中每一行記錄的列或列,它的作用是保證每一行記錄的唯一性和完整性。主鍵列(或列)不能包含空值(NULL),也不能重復(fù)。通常在建表時就應(yīng)該指定主鍵,如果沒有指定,則可以通過ALTER TABLE語句添加。
主鍵的設(shè)計需要遵循一些規(guī)則:
1.唯一性:主鍵列中的值必須唯一。
2.非空性:主鍵列中的值不能為NULL。
3.簡潔性:主鍵應(yīng)盡量簡短,因?yàn)橹麈I在一個表的所有索引中都會出現(xiàn)。
4.不變性:主鍵列的值不應(yīng)該經(jīng)?;蚋静桓淖?,否則會影響數(shù)據(jù)庫性能。
二、 外鍵
外鍵是一種將兩個表聯(lián)系起來的約束,是一種引用另一個表的主鍵的列或列。外鍵用于保持?jǐn)?shù)據(jù)的一致性,是關(guān)系數(shù)據(jù)庫的基礎(chǔ)。具體來說,外鍵定義了一個表與其他表之間的關(guān)系,這種關(guān)系方式可以是一對一、一對多或多對多,也可以是自引用。
外鍵有以下作用:
1.確保數(shù)據(jù)的完整性:外鍵約束保證了在一個表中引用另一個表時,其中的每個引用都是有效的。如果嘗試插入一個無效值,則會引發(fā)異常或報錯。
2.維護(hù)數(shù)據(jù)的準(zhǔn)確性:外鍵可以在不同表之間自動保持?jǐn)?shù)據(jù)的一致性。
3.提供查詢速度:外鍵可以提高查詢效率,因?yàn)樗沟每梢允褂孟嚓P(guān)聯(lián)的表中的索引。
4.提供安全性:外鍵約束可以保護(hù)數(shù)據(jù)庫不受攻擊者的劫持,并限制更改表中的數(shù)據(jù)。
三、使用主鍵和外鍵的注意事項(xiàng)
1.應(yīng)該始終嘗試使用主鍵和外鍵,因?yàn)樗鼈兛梢员WC數(shù)據(jù)完整性和一致性,是數(shù)據(jù)庫設(shè)計中的核心概念。
2.在設(shè)計數(shù)據(jù)庫表時,應(yīng)該考慮主鍵和外鍵的類型、長度、數(shù)據(jù)類型、數(shù)據(jù)范圍等因素。
3.在查詢數(shù)據(jù)時,應(yīng)該盡可能地避免使用聯(lián)合查詢,可以通過使用主鍵和外鍵來加速查詢過程。
4.當(dāng)需要修改主鍵或外鍵時,應(yīng)該考慮到這樣的修改對其他表和應(yīng)用程序的影響,并謹(jǐn)慎操作。
四、
本文簡述了數(shù)據(jù)庫主鍵和外鍵的概念、作用和應(yīng)用注意事項(xiàng)。主鍵用于保證數(shù)據(jù)的唯一性和完整性,外鍵用于維護(hù)數(shù)據(jù)的一致性和準(zhǔn)確性。在設(shè)計數(shù)據(jù)庫時,應(yīng)該盡可能地使用主鍵和外鍵,并考慮它們的類型、長度、數(shù)據(jù)類型、數(shù)據(jù)范圍等因素。在查詢數(shù)據(jù)和修改主鍵或外鍵時,需要謹(jǐn)慎操作。
相關(guān)問題拓展閱讀:
- 請問數(shù)據(jù)庫中的主鍵和外鍵是什么意思
- 數(shù)據(jù)庫之主鍵外鍵
請問數(shù)據(jù)庫中的主鍵和外鍵是什么意思
為了保證兩個表某些數(shù)據(jù)的一致性。
作為外鍵,它里面的數(shù)據(jù)必須是在主建中所存在的。
舉個例子:
有兩個關(guān)系:
student(s#,sname,d#),即學(xué)生這個汪沒襪關(guān)系有三個屬性:學(xué)號,姓名,所在系別
dep(d#,dname),即院系有兩個察槐屬性:系號、系名
則s#、d#是主鍵,也是各自所在關(guān)系的唯一候困激選鍵,d#是student的外鍵。
數(shù)據(jù)庫之主鍵外鍵
1,主鍵約束 (table的唯一標(biāo)識)
能夠激含作為主鍵列的特點(diǎn):該列不能為空,不能有重復(fù)值出現(xiàn)
創(chuàng)建表時指定主鍵的兩種方式:
CREATE TABLE stu(
sid CHAR(6) PRIMATY KEY,
sname VARCHAR(20),
age INT,
gender VARCHER(10)
);
指定sid列為主鍵列
CREATE TABLE stu(
sid CHAR(6),
sname VARCHAR(20),
age INT,
gender VARCHER(10),
PRIMARY KEY(sid)
);
指定sid列為主明禪笑鍵列
修改表時指定主鍵:ALTER TABLE stu ADD PRIMATY KEY(sid);
刪除主鍵:ALTER TABLE stu DROP PRIMARY KEY;
2,主鍵自增長
因?yàn)橹麈I列的特性是:必須唯一,不能為空,所以我們通常會指定主鍵為整形,然后設(shè)置其自動增長
創(chuàng)建表時指定主鍵自增長:
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);
修改表時設(shè)置主鍵自增長:ALTER TABLE stu
3,非空約束
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
age INT,
gender VARCHAR(10)
);
對sname列設(shè)置了非空約束
4,唯一約束
某些列不能設(shè)置重復(fù)的值,所以可以對列添加唯一約束
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL UNIQUE,
age INT,
gender VARCHAR(10)
);
6,外鍵約束
外鍵特點(diǎn):外鍵必須是另一個表的主鍵的值(外鍵要引用襲如主鍵?。怄I可以重復(fù),外鍵可以為空,一張表可以有多個外鍵!
CREATE TABLE dept( //部門表
deptno INT PRIMARY KEY AUTO_INCREMENT,
deptname CHAR(20)
);
INSERT INTO dept VALUES(10,‘研發(fā)部’);
INSERT INTO dept VALUES(20,‘人力部’);
INSERT INTO dept VALUES(30,‘財務(wù)部’);
CREATE TABLE emp( //員工表
empno INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(50),
dno INT, //員工所屬部門(外鍵),
CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)
);
INSERT INTO emp(empno,ename) VALUES(NULL,‘張三’),//外鍵可以不傳入值
INSERT INTO emp(empno,ename) VALUES(NULL,‘李四’,10),//外鍵可以重復(fù)
INSERT INTO emp(empno,ename) VALUES(NULL,‘王五’,10),
INSERT INTO emp(empno,ename) VALUES(NULL,‘趙六’,80),//dept表沒有主鍵值為80的記錄,sql客戶端編譯報錯
7,一對一關(guān)系模型
創(chuàng)建老公表
CREATE TABLE hashand(
hid INT PRIMARY KEY AUTO_INCREMENT,
hname VARCHAR(50),
);
INSERT INTO hashand VALUES(NULL,‘劉備’);
INSERT INTO hashand VALUES(NULL,‘關(guān)羽’);
INSERT INTO hashand VALUES(NULL,‘張飛’);
SELECT * FROM hashand
//創(chuàng)建老婆表
CREATE TABLE wife(
wid INT PRIMARY KEY AUTO_INCREMENT,
wname VARCHAR(50),
CONSTRAINT fk_wife_hashand FOREIGN KEY(wid) REFERENCES hashand(hid)
)
/**
wid:
1,非空
2,唯一
3,引用hid
*/
INSERT INTO wife VALUES(1,‘楊貴妃’);
INSERT INTO wife VALUES(2,‘妲己’);
INSERT INTO wife VALUES(3,‘褒姒’);
SELECT * FROM wife;
對于一對一關(guān)系模型從表的主鍵即是外鍵,例如老公和老婆的關(guān)系模型,一個老公只能有一個老婆,一個老婆只能有一個老公
對于一對多關(guān)系模型主表的主鍵即是從表的外鍵,例如訂單和用戶的關(guān)系模型,一個用戶可以下單多次,對應(yīng)多個訂單,而一個訂單只能屬于一個用戶
對于多對多關(guān)系模型沒有主表和從表之分,需要建立第三張表來記錄這兩張表的外鍵,建立兩個外鍵,分別引用這兩張表的主鍵
8,多對多關(guān)系模型
在表中簡歷多對多關(guān)系需要使用中間表,即需要三張表,在中間表中使用兩個外鍵,分別引用其他兩個表的主鍵,例如學(xué)生和老師的關(guān)系模型,一個老師可以有多個學(xué)生,一個學(xué)生可以有多個老師
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname CHAR(40)
);
CREATE TABLE teacher(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname CHAR(40)
);
CREATE TABLE stu_tea(
sid INT,
tid INT,
ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),
ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES teacher(tid)
);
INSERT INTO student VALUES(NULL,‘劉德華’);
INSERT INTO student VALUES(NULL,‘梁朝偉’);
INSERT INTO student VALUES(NULL,‘黃日華’);
INSERT INTO student VALUES(NULL,‘苗僑偉’);
INSERT INTO student VALUES(NULL,‘湯鎮(zhèn)業(yè)’);
INSERT INTO teacher VALUES(NULL,‘崔老師’);
INSERT INTO teacher VALUES(NULL,‘劉老師’);
INSERT INTO teacher VALUES(NULL,‘石老師’);
SELECT * FROM student;
SELECT * FROM teacher;
INSERT INTO stu_tea VALUES(1,1); //劉德華是崔老師的學(xué)生
INSERT INTO stu_tea VALUES(2,1); //梁朝偉是崔老師的學(xué)生
INSERT INTO stu_tea VALUES(3,1);//黃日華是崔老師的學(xué)生
INSERT INTO stu_tea VALUES(4,1);//苗僑偉是崔老師的學(xué)生
INSERT INTO stu_tea VALUES(5,1);//湯鎮(zhèn)業(yè)是崔老師的學(xué)生
INSERT INTO stu_tea VALUES(2,2);//梁朝偉是劉老師的學(xué)生
INSERT INTO stu_tea VALUES(3,2);//黃日華是劉老師的學(xué)生
INSERT INTO stu_tea VALUES(4,2);//苗僑偉是劉老師的學(xué)生
INSERT INTO stu_tea VALUES(3,3);//黃日華是石老師的學(xué)生
INSERT INTO stu_tea VALUES(5,3);//湯鎮(zhèn)業(yè)是劉老師的學(xué)生
SELECT * FROM stu_tea;
這時在stu_tea這個中間表中的每條記錄都是來說明student表和teacher表的關(guān)系的
例如在stu_tea表中的記錄:sid為1001,tid為2023,這說明編號為1001的學(xué)生有一個編號為2023的老師
sidtid
01 //編號為1001的學(xué)生有一個編號為2023的老師
02 //編號為1001的學(xué)生有一個編號為2023的老師
03 //編號為1001的學(xué)生有一個編號為2023的老師
01 //編號為2023的老師有一個編號為1002的學(xué)生
04 //編號為2023的老師有一個編號為1002的學(xué)生
9,合并結(jié)果集
要求要合并的結(jié)果集中,列的類型和列數(shù)相同
UNION,去除重復(fù)行,UNION ALL,不去除重復(fù)行
關(guān)于數(shù)據(jù)庫主鍵和外鍵簡稱的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽、重慶、貴陽機(jī)房服務(wù)器托管租用。
網(wǎng)站欄目:數(shù)據(jù)庫主鍵和外鍵簡述 (數(shù)據(jù)庫主鍵和外鍵簡稱)
URL鏈接:http://m.5511xx.com/article/ccsgdhg.html


咨詢
建站咨詢
