『壹』 資料庫裡面的主鍵和外鍵及候選鍵是什麼意思啊
1、主鍵(primary key)吧:一張表(關系)的一個列(屬性)或多個列可以作為主鍵,但是前提是讓這個列作主鍵,這個列就能保證該列下的各個行(元組)的值不能相同,比如說用姓名屬性作主鍵的話,那麼這個主鍵就不一定可以,如果有兩個人是同樣的名字的話,就不能做到該屬性下的各個元組數據的值不同,如果用阿拉伯數字作主鍵就是一個很好的選擇。
2、外鍵(foreign key):一張表(關系)的列(屬性)它同時存在表1和表2中,它不是表1的主鍵,而是表2的主鍵,就可以說他是表1的外鍵。
3、候選鍵(Candidate Key):能唯一標識表(關系)中行(元組)的列(屬性),則稱該屬性為候選鍵,也稱 候選關鍵字 或 候選碼;由此來看候選鍵可以不只一個,還看一看得出的就是主鍵同時它也是候選鍵。
『貳』 資料庫之主鍵外鍵
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,不去除重復行
『叄』 在Linux環境下,oracle資料庫中查詢表主鍵、外鍵及索引的命令是什麼
要通過查詢ORACLE的數據字典才能知道。
1、查主鍵名稱:
select * from user_constraints
where table_name = 'ART'
and constraint_type ='P';
查主鍵對應的列:
select * from user_cons_columns
where table_name = 'ART'
and constraint_name = 'PK_ART';
2、查索引名稱:
select * from user_indexes
where table_name = 'ART';
查索引對應的列:
select * from user_ind_columns
where table_name = 'ART'
and index_name = 'INDX_BA';
『肆』 資料庫中什麼是主鍵,什麼是外鍵
主鍵(Primary key): 也稱為主碼或主關鍵字,用於惟一地確定一個元組的屬性或屬性組(復合主碼)。每個關系都有一個並且只有一個主碼。
外鍵(Foreign Key):也稱為外碼或外部關鍵字。如果一個屬性集不是所在關系的關鍵字,但是是其他關系的關鍵字,則該屬性集稱為外部關鍵字。
在關系資料庫中可以通過外鍵使兩個關系關聯,這種聯系通常是一對多(1:n)的,其中主(父)關系(1方)稱為被參照關系,從(子)關系(n方)稱為參照關系。
(4)資料庫主鍵外鍵命令擴展閱讀:
資料庫主鍵作用:
1、保證實體的完整性
2、加快資料庫的操作速度
3、在表中添加新記錄時,DBMS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復。
4、DBMS自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
在有些資料庫中,雖然主鍵不是必需的,但最好為每個表都設置一個主鍵,不管是單主鍵還是復合主鍵。它存在代表著表結構的完整性,表的記錄必須得有唯一區分的欄位,主鍵主要是用於其他表的外鍵關聯,以及本記錄的修改與刪除。
『伍』 在MySQL中如何設置主鍵和外鍵
工具/原料
電腦 MySQL
方法/步驟
設置主鍵:
1、通過終端進入到mysql命令行工具。
『陸』 什麼是主鍵與外鍵
1、主關鍵字(主鍵,primary key)是被挑選出來,作表的行的惟一標識的候選關鍵字。一個表只有一個主關鍵字。主關鍵字又可以稱為主鍵。 主鍵可以由一個欄位,也可以由多個欄位組成,分別成為單欄位主鍵或多欄位主鍵。
2、外鍵:如果公共關鍵字在一個關系中是主關鍵字,那麼這個公共關鍵字被稱為另一個關系的外鍵。由此可見,外鍵表示了兩個關系之間的相關聯系。以另一個關系的外鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。外鍵又稱作外關鍵字。
(6)資料庫主鍵外鍵命令擴展閱讀:
主關鍵字的作用
1、保證實體的完整性;
2、加快資料庫的操作速度;
3、在表中添加新記錄時,ACCESS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復;
4、ACCESS自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
『柒』 Sql server怎樣創建主外鍵關系
Sqlserver怎樣創建主外鍵關系的方法。
如下參考:
1.為了幫助你理解,用一個例子來幫助你理解。它基本上是指通過引用表2中的欄位來約束表1中的欄位。
『捌』 sql用命令創建主鍵與外鍵。
創建SQL的主鍵和外鍵約束的方法:
--在創建表時就可以對欄位加上約束:
create table Student
(
StudentNo int PRIMARY KEY IDENTITY(1,1), --加主鍵約束,還有標識列屬性(兩者構成實體完整性)
StudentName nvarchar(15) not null, --加非空約束,不加"not null" 默認為:可以為空
StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外鍵約束,格式:FOREIGN KEY REFERENCES 關聯的表名(欄位名)
StudentAge int DEFAULT ((0)), --加默認值約束
StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加檢查約束,格式:check (條件表達式)
)
--如果在表創建好了以後再加約束,則格式分別為:
-- 主鍵:
alter table 表名
add constraint PK_欄位名--"PK"為主鍵的縮寫,欄位名為要在其上創建主鍵的欄位名,'PK_欄位名'就為約束名
primary key (欄位名) --欄位名同上
--唯一約束:
alter table 表名
add constraint UQ_欄位名
unique (欄位名)
--外鍵約束:
alter table 表名
add constraint FK_欄位名--"FK"為外鍵的縮寫
foreign key (欄位名) references 關聯的表名(關聯的欄位名) --注意'關聯的表名'和'關聯的欄位名'
alter table 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)
alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)
alter table 成績表 add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo)
ON UPDATE CASCADE ON DELETE CASCADE
級聯更新,級聯刪除,這樣在刪除主表Student時,成績表中該學生的所有成績都會刪除。
--檢查約束:
alter table 表名
add constraint CK_欄位名
check (條件表達式) --條件表達式中的條件用關系運算符連接
--默認值約束:
alter table 表名
add constraint DF_欄位名
default '默認值' for 欄位名--其中的'默認值'為你想要默認的值,注意'for'
--刪除創建的約束:
alter table 表名
drop constraint 約束名--約束名為你前面創建的如:PK_欄位這樣的約束名
--注意:如果約束是在創建表的時候創建的,則不能用命令刪除
--只能在'企業管理器'裡面刪除
參考資料 : http://www.studyofnet.com/news/92.html
希望以上的回答能夠幫到你
『玖』 在MySQL中如何設置主鍵和外鍵
1.外鍵的作用,主要有兩個:
一個是讓資料庫自己通過外鍵來保證數據的完整性和一致性
一個就是能夠增加ER圖的可讀性
2.外鍵的配置
1)先創建一個主表,代碼如下:
#創建表student,並添加各種約束
create table student
(
id int primary key , #主鍵約束
name varchar(20) , #唯一約束
age int NOT NULL, #非空約束
sex varchar(2) ,
address varchar(20) default '重慶' #默認約束
) ;
再通過一個外鍵,創建一個分數表,這樣的話,就可以方便查詢。代碼如下:
#創建分數表
create table score
(
id int primary key ,
sid int ,
china int ,
history int,
english int,
constraint FK_sid foreign key(sid) references student(id) #通過外鍵創建鏈接
) ;
創建外鍵的方法有很多,其中最常見創建外鍵的格式是:constraint FK_*** foreign key(**) references 鏈接的外表
刪除外鍵:
alter table drop foreign key '外鍵名'.
注意:
只有在定義外鍵時,用constraint 外鍵名 foreign key .... 方便進行外鍵的刪除
主鍵是唯一標示這一行的,就好像你的身份證號一樣,每個人只有一個,也是唯一能證明你是你的東西。外鍵是別人執行你的東西。也就是說如果一個人想和你有點關系怎麼辦,那就要關聯起來,怎麼關聯起來,就通過外鍵啊
定義主鍵和外鍵主要是為了維護關系資料庫的完整性,總結一下:
一、主鍵是能確定一條記錄的唯一標識,比如,一條記錄包括身份正號,姓名,年齡。身份證號是唯一能確定你這個人的,其他都可能有重復,所以,身份證號是主鍵。
外鍵用於與另一張表的關聯。是能確定另一張表記錄的欄位,用於保持數據的一致性。比如,A表中的一個欄位,是B表的主鍵,那他就可以是A表的外鍵。
『拾』 資料庫主鍵和外鍵怎麼寫
舉例:設置主鍵
create table 學生表
(學號, char(12) primary key not null,
姓名, char(8) not null,
班級編號, char(10) foreign key references 班級表(班級編號)
)
第一列學號設為主鍵,第三列班級編號為外鍵,參考班級表中的班級編號列。