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

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


咨詢
建站咨詢
