TẠO KHÓA NGOẠI TRONG MYSQL WORKBENCH
Chúng ta đã có được học những lệnhtạo bảng (Create Table), quan niệm về khóa bao gồm (Primary Key) và một vài thành phần khác như UNIQUE, AUTO_INCREMENT, tuy vậy tất cả những thành phần này hồ hết xử lý trên một bảng duy nhất. Câu hỏi đặt ra là nếu có tương đối nhiều bảng thì liệu tất cả mối liên hệ giữa chúng hay không? Câu trả lời là có, và đó đó là khóa ngoại foreign key.
Bạn đang xem: Tạo khóa ngoại trong mysql workbench


1. Khóa nước ngoài (Foreign Key) là gì?
Trong bài này tôi sẽ không trình bàikhái niệm khóa ngoại một cách chi tiết nữa mà bước vào định nghĩa bao gồm của nó. Foreign key là quan hệ giữahai bảng và quan hệ này ta hay gọi là phụ vương - con,nghĩa là ví như bảng A tất cả một nằm trong tính link tới bảng B thì lúc này bảng B đóng vai trò là cha và bảng A đóng vai trò là con.
Khái niệm Foreign key là gìkhông chỉ có ở MySQL nhưng nó là một thành phần củatất cả cáchệ quản ngại trị csdl như SQL Server, Oracle, Access, ... Nếu bạn đã từng học tập qua các quy mô CSLD thì không còn lạ gì khóa nước ngoài nữa.
Thông thường họ có hai nhiều loại khóa ngoại chính là khóa ngoại thân hai bảng cùng khóa nước ngoài trỏ đến chủ yếu nó (đệ quy).
Bài viết này được đăng trên
Khóa ngoại thân hai bảng
Xét sơ đồCSDL sau đây:
Các chúng ta thấy vào bảng customers và orders có một quan hệ với tên thường gọi là "mỗi order làcủa một customer làm sao đó". Phía trên ta điện thoại tư vấn là quan hệ (1:n), có nghĩa là một customercó thê có không ít orders và mỗi order chỉ thuộc về một customer duy nhất.Xem kỹ hơn ta thấy trong bảng orders có field customerNumber và nó đã trỏ đến khóa chủ yếu (Primary Key) của bảng customers.
Như vậy ta tất cả kế luận như sau:
Khóa ngoại sinh sống bảng orderssẽ tham chiếu đến khóa bao gồm của bảng customers. Bây giờ bảng customersgọi là bảng phụ thân và bảng ordergọi là bảng con. Đây chính là điều BẮT BUỘC của khóa ngoại.
Khóa ngoại trỏ đến chính bảng đó
Xét sơ đồ csdl sau đây:
Trong sơ đồ vật này nó có một khóa nước ngoài là reportsTo với trỏ đến chính khóa chủ yếu của nó employeeNumber. Quan hệ này ta nói như sau "mỗi nhân viên có thể là một nhân viên bình thường hoặc là người cai quản của một nhân viên cấp dưới khác. Hằng ngày các nhân bị cai quản lýkhác sẽ report (reportsTo) tới nhân viên cấp dưới quản lý".Sơ đồ này ta điện thoại tư vấn là đệ quy, tức là khóa ngoại đang tham chiếu tới thiết yếu table nó luôn. Trong thực tiễn cũng hay gặp trường đúng theo này nên các bạn cầnlưu ý nhé.
2. Chế tạo ra khóa ngoại (Foreign Key) vào MySQL
Ta sẽ sử dụng cú pháp T-SQL để tạo nên khóa ngoại, chúng ta có không ít các chế tác và tùy vào nhu cầu của ban mà sử dụng cho phù hợp. Toàn bộ các cách đều có chung một cấu trúc đó là khai báo field của bảng A cùng sẽ tham chiếu cho field làm sao của bảng B bởi từ khóa REFERENCES.
Tạo vào lệnh tạo nên bảng create table
Chúng ta sẽ khởi tạo trực tiếp trong lệnh tạo nên bảng cùng cú pháp của nó cũng giống như như lệnh chế tác khóa chính, tức là sẽ đặt ở cuối phần khai báo field. Nếu thực hiện cách này thì khóa ngoại sẽ không tồn tại tên.
lấy một ví dụ
CREATE TABLE Groups (groupid INT(11) NOT NULL PRIMARY KEY,title INT(11) NOT NULL,LEVEL TINYINT(1) default 1 NOT NULL);CREATE TABLE Users(userid INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL ,email VARCHAR (50) NOT NULL ,groupid INT(11),FOREIGN KEY (groupid) REFERENCES Groups(groupid));
Các bạn thấy tôi đã sử dụng từ khóaFOREIGN KEY (groupid) REFERENCES Groups(groupid) để sản xuất khóa ngoại, trong đó:
FOREIGN KEY (groupid): là field được lựa chọn làm khóa ngoại ngơi nghỉ bảng con, có nghĩa là bảng Users.REFERENCES Groups(groupid): là khóa bao gồm của bảng cha, có nghĩa là bảng Groups.Sau lúc tạo xong xuôi bạn vào PHPMyAdminvà chọn mục database, lựa chọn diagram ngơi nghỉ thanh nguyên lý thì lúc này bạn sẽ thấy một sơ vật như sau:
Như vậy là chúng ta đã tạo thành công xuất sắc rồi đấy.
Ví dụ bao gồm đặt tên:
Tương từ như những phần trước, để tại vị tên cho khóa nước ngoài thì ta phải sử dụng từ khóaCONSTRAINT.
Ví dụ tất cả đặt tên
CREATE TABLE Groups (groupid INT(11) NOT NULL PRIMARY KEY,title INT(11) NOT NULL,LEVEL TINYINT(1) mặc định 1 NOT NULL);CREATE TABLE Users(userid INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL ,email VARCHAR (50) NOT NULL ,groupid INT(11),CONSTRAINT fk_group FOREIGN KEY (groupid) REFERENCES Groups(groupid));
Tạo bằng lệnhALTER TABLE
Với biện pháp này ta phải tạo hai bảng trước, tiếp đến sẽ cần sử dụng lệnh ALTER TABLE để thêm FOREIGN KEY.
CREATE TABLE Groups (groupid INT(11) NOT NULL PRIMARY KEY,title INT(11) NOT NULL,LEVEL TINYINT(1) mặc định 1 NOT NULL);CREATE TABLE Users(userid INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL ,email VARCHAR (50) NOT NULL ,groupid INT(11));ALTER TABLE Users showroom FOREIGN KEY(groupid) REFERENCES Groups(groupid);
Hoặc:
CREATE TABLE Groups (groupid INT(11) NOT NULL PRIMARY KEY,title INT(11) NOT NULL,LEVEL TINYINT(1) mặc định 1 NOT NULL);CREATE TABLE Users(userid INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR (50) NOT NULL,groupid INT(11));ALTER TABLE Users add CONSTRAINT fk_group FOREIGN KEY(groupid) REFERENCES Groups(groupid);
Tạo khóa ngoại trường thích hợp tham chiếu chính nó
Trường đúng theo này ta cũng thực hiện cú pháp tương tự, thay do tham chiếu cho tới bảng nào kia thì đang tham chiếu đến chính nó.
ví dụ như
CREATE TABLE Employee(id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,fullname VARCHAR(50) NOT NULL,email VARCHAR (50) NOT NULL,leader_id INT (11) NOT NULL,CONSTRAINT pk_self FOREIGN KEY (leader_id) REFERENCES Employee(id) );
3. Xóa (Drop)Foreign Key
Để xóa được Foreign Key thì bạn phải ghi nhận tên của chính nó là gì, cơ mà tên chỉ trường tồn trong trường phù hợp ta có áp dụng từ khóaCONSTRAINT lúc sinh sản khóa,vì vậy khuyến khích bạn sử dụngCONSTRAINT để tạo nên khóa ngoại.
Sau đấy là cú pháp xóa Foreign Key:
ALTER TABLE Users DROP FOREIGN KEY fk_group;
Trong kia fk_group là tên của khóa ngoại.
Lưu ý quan lại trọng:
Bạn chỉ thực hiện được thao tác xóa lúc không tồn trên một bảng bé nào tham chiếu mang lại nó.
4. Lời kết
Trong bài này nhà yếu tìm hiểu định nghĩa của khóa nước ngoài (Foreign key) và mày mò một số biện pháp tạo khóa ngoại thông dụng, bài xích này xong tại đây, bài tiếp sau mình sẽ nói về lệnh alter table.