當前位置:首頁 » 操作系統 » 資料庫中主鍵和外鍵

資料庫中主鍵和外鍵

發布時間: 2023-08-08 04:34:28

資料庫中什麼是主鍵,什麼是外鍵

關鍵字(Key)

關鍵字是關系模型中的一個重要概念,它是邏輯結構,不是資料庫的物理部分。

候選關鍵字(Candidate Key)

如果一個屬性集能惟一地標識表的一行而又不含多餘的屬性,那麼這個屬性集稱為候選關鍵字。

主關鍵字(Primary Key)

主關鍵字是被挑選出來,作表的行的惟一標識的侯選關鍵字。一個表只有一個主關鍵字。主關鍵字又可以稱為主鍵。

公共關鍵字(Common Key)

在關系資料庫中,關系之間的聯系是通過相容或相同的屬性或屬性組來表示的。如果兩個關系中具有相容或相同的屬性或屬性組,那麼廳慎這個屬性或屬性組被稱為這兩個關系的公共關鍵字。

如有一個表,欄位為:

id firstname lastname address phone IDcard

那麼id或IDcard或firstnamelastname都可以說是關鍵字。

其中id為主關鍵字,IDcard和firstnamelastname為候選關鍵字

外關鍵字(Foreign Key)

如果公共關鍵字在一個關系中是主關鍵字,那麼這個公共關鍵字被稱為另一指伏洞個關系的外關鍵字。由此可見,外關鍵字表示了兩個關系之間的聯系。以另一個關系的外關鍵字作主關鍵字的表被稱為主表,具有此外關鍵字的表被稱為主表的從表。外關鍵字又稱作外鍵。

表A:id firstname lastname address classid

表B:classid classname

classid是表B的主鍵,在表A中有一個欄位和表唯枯B中的classid關聯,所以,classid 是表B的外鍵

② 資料庫中主鍵和外鍵是幹嘛用的

主鍵是表格里的(一個或多個)欄位,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關系的約束。
建立外鍵後,在插入數據時候會檢測數據在主鍵表中是否存在,如果不存在則無法插入,通過這可以提高維護資料庫的完整性和一致性

簡單點兒說
主鍵是對表的約束,保證數據的唯一性!
外鍵是建立表於表之間的聯系,方便程序的編寫!

③ 主鍵和外鍵的作用

主鍵和外鍵的作用:

1、保證實體的完整性,加快資料庫操作速度,在表中添加記錄時,access會自動檢查新記錄主鍵值,不允許該值與主鍵值重復。access會自動按主鍵值排序好的顯示出來。如果沒有約束,則是按照用戶輸入信息的順序顯示閉嘩出來。主鍵不接受空值,約束確保唯一數據。

2、外鍵保證的是數據的完整性。外鍵:一組數據的主鍵是另一組數據的的元素;主鍵約束了外鍵所在表中不能存在主鍵類之外的值;外鍵用於與另一張表的關聯。是能確定另茄如一張表記錄的欄位,用於保持數據的一致性。比如,A表中的一個欄位,是B表的主鍵,就可以是A表的外鍵。

(3)資料庫中主鍵和外鍵擴展閱讀:

主鍵和外鍵的注意事項:

1、主鍵默認非空,默認唯一性約束,只有主鍵才能設置自動增長,自動增長一定是主鍵,主鍵不一定自動增長;

設置主鍵的方式:在定義列時設置:ID INT PRIMARY KEY;在列定義完之後設置:primary KEY(id)、

2、只有INNODB的資料庫引擎支持外鍵,修改my.ini文件設置default-storage-engine=INNODB 外鍵必須與參照列的數據類型必須相同(數值型要求長度和無符號都相同,字元串要求類型相同,長度可以不同)。

設置外鍵的語法:CONSTRAINT 外鍵名 FOREIGN KEY (外鍵欄位)REFERENCES 參照表 (參照欄位) ON DELETE SET NULL ON UPDATE CASCADE 設置參照完整性。

3、外鍵約束的參照操作:

RESTRICT拒絕參照表刪除或更新參照欄位;

RESTRICT和NO ACTION相同,但這個指令只在mysql生效;

CASCADE刪除或更新參照表的參照欄位時,外鍵表的記錄同步刪除更新;

SET NULL 刪除或更新參照表的參照欄位時,外鍵表的外鍵設顫態啟為NULL。

④ 資料庫中 主鍵與外鍵的區別

主鍵是定義一個表中起主要作用的數據項,這些數據項的數據在表中是唯一的,同時系統按主鍵為表建立索引。\x0d\x0a\x0d\x0a外鍵是定義一個表中的某數據項的數據,要參照另一個表的主鍵數據。既沒有在另一個表的主鍵數據中出現的數據,不允許在這個表的外鍵數據項中出現。\x0d\x0a\x0d\x0a主鍵:表中記錄的唯一標識\x0d\x0a\x0d\x0a外鍵:依賴於別的表的數據\x0d\x0a\x0d\x0a唯一鍵:在表中唯一\x0d\x0a\x0d\x0a鍵是一個或多個欄位的組合\x0d\x0a\x0d\x0a唯一鍵:可以確定一條記錄的欄位(或欄位組合),一張表可以有多個唯一鍵,正如可以識別你的身份的可以是身份證,學生證,軍人證\x0d\x0a\x0d\x0a主鍵:你把唯一鍵的一個選做主鍵,一張表只能有一個主鍵\x0d\x0a\x0d\x0a外鍵:所定義的外鍵是另一張表的主鍵,\x0d\x0a\x0d\x0a主鍵:表中記錄的唯一標識,外鍵:依賴於別的表的數據,唯一鍵:在表中唯一。\x0d\x0a\x0d\x0a主鍵和唯一鍵的一個區別:主鍵是不允許為NULL的,唯一鍵則可以,當然你可以加上NOT NULL來限制它\x0d\x0a\x0d\x0a主鍵:能夠唯一表示數據表中的每個記錄的欄位或者欄位的組合就稱為主鍵。一個主鍵是唯一識別一個表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的數據進行關聯,在這一點上,主鍵是不同表中各記錄間的簡單指針,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用於指定一個或多個列的組合值具有唯一性,以防止在列中輸入重復的值,所以,主鍵的值對用戶而言是沒有什麼意義,並且和它賦予的值也沒有什麼特別聯系。\x0d\x0a\x0d\x0a外鍵:\x0d\x0a\x0d\x0a若有兩個表A,B,C是A的主鍵,而B中也有C欄位,則C就是表B的外鍵,外鍵約束主要用來維護兩個表之間數據的一致性。\x0d\x0a\x0d\x0aA為基本表,B為信息表。\x0d\x0a\x0d\x0a在資料庫中,常常不只是一個表,這些表之間也不是相互獨立的,不同的表之間需要建立一種關系,才能將它們的數據相互溝通,而在這個溝通過程中,就需要表中有一個欄位作為標志,不同的記錄對應的欄位取值不能相同,也不能是空白的,通過這個欄位中不同的值可以區別各條記兄螞錄,就像我們區別不同的人,每個人都有名字,但它卻不能作為主鍵,因為人名很容易出現重復,而身份證號是每個人都不同的,所以可以根據它來區別不同的人,資料庫的表中作為主鍵的段段就要像人的身份證號一樣,必須是每個記錄的值都不同,這才能根據主鍵的值來確定不同的記錄。\x0d\x0a\x0d\x0a什麼是外鍵?\x0d\x0a\x0d\x0a說明你的表A中的某項a,是引用表B的某列b\x0d\x0a\x0d\x0a為什麼要使用外鍵?\x0d\x0aRDBMS的基本概念,可以維護資料庫的完整。\x0d\x0a\x0d\x0a如何來用,涉及到資料庫的定義。\x0d\x0a\x0d\x0a唯一約束和主鍵的區別是什麼?\x0d\x0a\x0d\x0a唯一性約束\x0d\x0a\x0d\x0a唯一性約束所在的列允許空值,但是主鍵約束的列不允空值。\x0d\x0a\x0d\x0a可以把唯一約束放在一個或者多個列上,但是,唯一性約束所在的列並不是表的主鍵列。\x0d\x0a\x0d\x0a唯一性約束強制在指定的列上創建一個唯一性索引,在默認情況下,創建唯一性的非聚簇索引,但是,也可以指定所創羨薯埋建的索引是聚簇索引。\x0d\手埋x0a\x0d\x0a主鍵:\x0d\x0a\x0d\x0a用於標識某行而且與之相關\x0d\x0a\x0d\x0a是不可能更新\x0d\x0a\x0d\x0a不應該允許空\x0d\x0a\x0d\x0a唯一域/欄位\x0d\x0a\x0d\x0a用於作為訪問某行的可選手段。\x0d\x0a\x0d\x0a只要唯一就可以更新\x0d\x0a\x0d\x0a可以為空\x0d\x0a\x0d\x0a注意唯一和主鍵的區別,它們都是創建一個唯一的索引,一個表格僅含有一個主鍵約束列,但是,它有可能在其他列中含有許多的唯一約束。

⑤ 資料庫的主鍵和外鍵如何區別

主鍵是你這張表的標識列,外鍵是另外一張表的標識列所對應的序列
及主鍵對應的是本表裡,而外鍵是本表與其他表的連接。

⑥ 什麼是主鍵和外鍵

問題一:什麼是主鍵和外鍵 通俗的說吧
先說說主鍵(primary key)吧:一張表(關系)的一個列(屬性)或多個列可以作為主鍵,但是前提是讓這個列作主鍵,這個列就能保證該列下的各個行(元組)的值不能相同,比如說你用姓名屬性作主鍵的話,那麼這個主鍵就不一定可以,如果有兩個人是同樣的名字的話,就不能做到該屬性下的各個元組數據的值不同,如果用 *** 數字作主鍵就是一個很好的選擇。
再說說外鍵(foreign key):一張表(關系)的列(屬性)它同時存在表1和表2中,它不是表1的主鍵,而是表2的主鍵,就可以說他是表1的外鍵。
那麼什麼是候選鍵(Candidate Key)呢:能唯一標識表(關系)中行(元組)的列(屬性),則稱該屬性為候選鍵,也稱 候選關鍵字 或 候選碼;由此來看候選鍵可以不只一個,還看一看得出的就是主鍵同時它也是候選鍵

問題二:SQL中什麼叫主鍵,什麼是外鍵,有啥關系 就好像一個訂單需要2張表
1站訂單表 一張訂單明細表 訂單表裡面的ID是主鍵
明細表裡的也有個ID 關聯的訂單表的ID 那明細表的ID就是外鍵
訂單表的一個產品如果刪掉了 但明細表裡面的關聯訂單表的數據沒刪掉 就造成了數據冗餘
所以設置主外鍵是防止數據誤刪和冗餘 設置主鍵後 如果明細表的數據沒刪掉 主鍵內的信息就刪不掉

問題三:什麼是主鍵和外鍵 這需要理清幾個概念:
1)候選鍵: 關系中的一個屬性組,其值能唯一標識一個元組,若從該屬性組中去掉任何一個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼。
2)主鍵:當有多個候選碼時,可以選定一個作為主碼,選定的候選碼稱主鍵
3)外鍵: 關系R中的一個屬性組,它不是R的候選碼,但它與另一個關系S的候選碼相對應,則稱這個屬性組為R的外碼或外鍵。

問題四:什麼是主鍵和外鍵 關系型資料庫中的一條記錄中有若干個屬性,若其中某一個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成為一個主鍵比如 :
學生表(學號,姓名,性別,班級)
其中每個學生的學號是唯一的,學號就是一個主鍵
用戶表(用戶名、密碼、登錄級別)
其中用戶名是唯一的, 用戶名就是一個主鍵
上機記錄表(卡號,學號,姓名、序列號)
上機記錄表中單一一個屬性無法唯一標識一條記錄,學號和姓名的組合才可以唯一標識一條記錄,所以 學號和姓名的屬性組是一個主鍵

問題五:什麼是外鍵表,什麼是主鍵表? 表1是主鍵表、
表1的主鍵欄位在表2中做外鍵、而表1自己卻沒有外鍵
表2是外鍵表
有一個依賴表1typeid的欄位、作為圓行外鍵、取值必須是其依賴主鍵表表1中主鍵欄位有的值

問題六:資料庫中什麼是主鍵,什麼是外鍵 主鍵(Primary key): 也稱為主碼或主關鍵字,用於惟一地確定一個元組的屬性或屬性組(復合主碼)。每個關系都有一個並且只有一個主碼。
外鍵(Foreign Key):也稱為外碼或外部關鍵字。如果一個屬性集不是所在橘前嘩關系的關鍵字,但是是其他關系的關鍵字,則該屬性集稱為外部關鍵字。在關系資料庫中可以通過外鍵使兩個關系關聯,這種聯系通常是一對多(1:n)的,其中主(父)關系(1方)稱為被參照關系,從(子)關系(n方)稱為參照關系。

問題七:oracle中 主鍵和外鍵是什麼意思?什麼地方採用呢? 1、這種簡單的搜一下都有吧。不止oracle,所有關系型資料庫主鍵和外鍵的含義都一致;
2、主鍵和外鍵是兩種類型的約束;
3、主鍵是能唯一的標識表中的每一行,就是說悔神這一列非空且值不重復,可以指定為主鍵;作用是用來強制約束表中的每一行數據的唯一性;
4、外鍵是b表中的某一列引用的值來源於a表中的主鍵列。也是約束b表中的外鍵列的值必須取致a表中的主鍵列值,不是其中的值就不能插入b表中。可以形成a表b表的聯系,保持數據的約束和關聯性。

問題八:sql中什麼叫主鍵表,什麼叫外鍵表 主鍵表 外鍵表 這個概念沒有 沒聽過
不過從字面理解 這個應該是基於有外鍵的表說的
有外鍵的那張表是外鍵表 另外張關聯外鍵的應該就是主鍵表

⑦ 資料庫之主鍵外鍵

1,主鍵約束 (table的唯一標識)

能夠作為主鍵列的特點:該列不能為空,不能有重復值出現

創建表時指定主鍵的兩種方式:

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,主鍵自增長

因為主鍵列的特性是:必須唯一,不能為空,所以我們通常會指定主鍵為整形,然後設置其自動增長

創建表時指定主鍵自增長:

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,『研發部』);

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,一對一關系模型

創建老公表

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

//創建老婆表

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,『湯鎮業』);

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);//湯鎮業是崔老師的學生

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);//湯鎮業是劉老師的學生

SELECT * FROM stu_tea;

這時在stu_tea這個中間表中的每條記錄都是來說明student表和teacher表的關系的

例如在stu_tea表中的記錄:sid為1001,tid為2001,這說明編號為1001的學生有一個編號為2001的老師

sid          tid

1001       2001 //編號為1001的學生有一個編號為2001的老師

1001       2002 //編號為1001的學生有一個編號為2002的老師

1001       2003 //編號為1001的學生有一個編號為2003的老師

1002       2001 //編號為2001的老師有一個編號為1002的學生

1002       2004 //編號為2004的老師有一個編號為1002的學生

9,合並結果集

要求要合並的結果集中,列的類型和列數相同

UNION,去除重復行,UNION ALL,不去除重復行

熱點內容
舞蹈培訓源碼 發布:2025-03-12 13:34:04 瀏覽:740
電腦與伺服器之間快速傳輸文件 發布:2025-03-12 13:26:55 瀏覽:954
ftp上的文件在伺服器 發布:2025-03-12 13:26:53 瀏覽:415
linux關閉445埠 發布:2025-03-12 13:20:47 瀏覽:218
加密語句表情 發布:2025-03-12 13:17:36 瀏覽:820
電腦伺服器響應不了 發布:2025-03-12 13:16:02 瀏覽:896
vmwarenat外網訪問 發布:2025-03-12 13:06:31 瀏覽:46
紅魔三哪個安卓系統最穩定 發布:2025-03-12 13:01:45 瀏覽:302
arm嵌入式linux系統 發布:2025-03-12 13:01:45 瀏覽:491
伺服器組播地址 發布:2025-03-12 13:00:55 瀏覽:267