您現在的位置是:首頁 > 攝影首頁攝影
測牛學堂:軟體測試資料庫知識總結之sql外來鍵約束
sql外來鍵的值怎麼賦予
mysql外來鍵總結
我們之前學習的都是針對一個表的操作。如果要進行多個表之間的操作,就要用到外來鍵把他們關聯起來。
外來鍵的作用:能夠讓多個表進行關聯,使表與表之間有聯絡,實現共性抽取。
應用場景
如果資料項比較多的情況下,把所有資料都存放在一個表中,如果
表太大
,影響操作效率。解決辦法就是把一個表拆分成多個表,
並且用外來鍵去關聯。
例子:
如果要設計一個員工表
1
)員工表:編號、姓名、年齡、性別、所在分公司、所在部門
2
)部門表:編號、部門名稱、部門經理、主要任務
3)公司表:編號、分公司名,地址、電話、法人
把公司和部門的資料抽取出來,形成一個單獨的表,並以公司表為主表,公司表關聯部門表,部門表關聯員工表,也就是用公司表的“編號”指向部門表“所在公司”,用部門表的“編號”指向員工表的“所在部門”
總結:
1 以上三個表的設計,就解決了欄位冗餘+表太大的問題☆(其實還可以把部門表名稱再次細分)
2一個表的外來鍵就是對應另一個表的主鍵(也可以是當前表的主鍵)
3外來鍵的設定最好是在建立表的時候,且對應的表型別是InnoDB型別,如果是其他型別,就沒有約束作用
4有外來鍵約束的表,一定是先建立主表(被指向的),後建立副表(有外來鍵的)
5外來鍵約束的兩個表,必須都是InnoDB型別
外來鍵設定
1
建立公司表
CREATE TABLE `company` ( `id` int NOT NULL AUTO_INCREMENT, `company_name` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, `company_addr` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL, `company_tel` varchar(16) COLLATE utf8mb4_general_ci DEFAULT NULL, `company_person` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ciINSERT INTO `company` VALUES (‘1’, ‘北京分公司’, ‘北京市朝陽區xxxx號’, ‘010-123456’, ‘李四111’);INSERT INTO `company` VALUES (‘2’, ‘上海分公司’, ‘上海市浦東區xx號’, ‘123-5678’, ‘李四222’);INSERT INTO `company` VALUES (‘3’, ‘深圳分公司’, ‘深圳市xxx號’, ‘789-111222’, ‘李四333’);
2 建立部門表
create table department ( id int primary key not null auto_increment, department_name varchar(32), department_leader varchar(32), worker varchar(128), company_fid int, constraint fk foreign key(company_fid) references company(id))engine=innodb;
3 建立員工表
create table staff ( id int primary key not null auto_increment, staff_name varchar(32), staff_age tinyint, staff_sex char(1), department_fid int, CONSTRAINT staff_fk foreign key(department_fid) REFERENCES department(id))engine=innodb
外來鍵總結
1外來鍵只能指向主鍵
2外來鍵和主鍵的欄位型別必須一致,通常用int型別
3外來鍵是一種約束,目的是為了方便管理資料,當有冗餘欄位時,可以提取出一個表進行關聯,簡化資料儲存
4一張表中可以有多個外來鍵,但主鍵只能是一個
5外來鍵和主鍵所在的表型別必須都是InnoDB
6
關係型資料庫的特點就是
資料之間有關聯
7如果一個表被另一個表關聯,它是無法被刪除的。