06 May 2016

How to create foreign key in mysql

Create Foreign Key in mysql workbench

USE sinhvien;

CREATE TABLE city (
  id int(11) NOT NULL,
  name varchar(45) DEFAULT NULL,
  PRIMARY KEY (id)
);


CREATE TABLE sinhviencity(
    id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    idname VARCHAR(50) NOT NULL ,
    class VARCHAR (50) NOT NULL ,
    cityID INT(11),
    CONSTRAINT city_fk FOREIGN KEY (cityID) REFERENCES city(id)
);

How to Replace ` ?

Ctrl + F > Find & Replace > ` and  "" > Done


Home > Models > Create EER models from database > next...choice table ...


Tạo trong lệnh tạo bảng create table

Chúng ta sẽ tạo trực tiếp trong lệnh tạo bảng và cú pháp của nó cũng tương tự như lệnh tạo khóa chính, nghĩa là sẽ đặt ở cuối danh sách các fields.
Ví dụ không đặt tên:
1
2
3
4
5
6
7
8
9
10
11
12
13
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óa FOREIGN KEY (groupid) REFERENCES Groups(groupid) để tạo khóa chính, trong đó:
  • FOREIGN KEY (groupid): là field ở bảng Users
  • REFERENCES Groups(groupid): là tham chiếu đến field groupid trong bảng Groups
Sau khi tạo xong bạn vào PHPMYADMIN và chọn database, chọn diagram ở thanh tools bạn sẽ thấy một sơ đồ như sau:
Như vậy là bạn đã tạo thành công rồi đấy.
Ví dụ có đặt tên:
Tương tự các phần trước, để đặt tên thì ta phải sử dụng từ khóa CONSTRAINT.
Ví dụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
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),
    CONSTRAINT fk_group FOREIGN KEY (groupid) 
REFERENCES Groups(groupid)
);

Tạo bằng lệnh ALTER TABLE

Với cách này ta phải tạo hai bảng trước, sau đó sẽ dùng lệnh ALTER TABLE để thêm FOREIGN KEY.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)
);
ALTER TABLE Users ADD FOREIGN KEY(groupid) 
REFERENCES Groups(groupid);
Hoặc:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)
);
ALTER TABLE Users ADD CONSTRAINT fk_group 
FOREIGN KEY(groupid) 
REFERENCES Groups(groupid);

Tạo khóa ngoại trường hợp tham chiếu chính nó

Trường hợp này ta cũng sử dụng cú pháp tương tự, sự khác nhau chỉ là thay vì tham chiếu tới bảng nào đó thì nó tham chiếu đến chính tên bảng của nó.
Ví dụ:
1
2
3
4
5
6
7
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 
Foreign Key (DROP)

Để xóa được Foreign Key thì bạn phải biết tên của nó là gì, mà tên của nó thì chỉ tồn tại trong trường hợp ta có sử dụng từ khóa CONSTRAINT để tạo. Chính vì vậy khuyến khích bạn sử dụng CONSTRAINTđể tạo khóa ngoại nhé.
Sau đây là cú pháp xóa Foreign Key:
1
ALTER TABLE Users DROP FOREIGN KEY fk_group;
Trong đó fk_group là tên của khóa ngoại.
Lưu ý quan trọng:
Khóa ngoại ở bảng orders sẽ tham chiếu đến khóa chính của bảng customers. Lúc này bảng customers gọi là bảng cha và bảng order gọi là bảng con. Đây chính là điều BẮT BUỘC của khóa ngoại.

# Lời kết

Trong bài này chủ yếu tìm hiểu định nghĩa Khóa ngoại (Foreign key) là gì và tìm hiểu một số cách tạo khóa ngoại thông dụng, cách tạo khóa ngoại cho một bảng và cho nhiều bảng. Thông thường khi làm việc với các ứng dụng web thì ta ít khi sử dụng khóa ngoại bởi vì sẽ rất chậm, vì vậy người ta sẽ cố gắng thiết kế CSDL làm sao tối ưu để không tồn tại khóa ngoại.

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang