18/08/2018, 11:05

(PRIMARY KEY) Tạo khóa chính trong MySQL

PRIMARY KEY (Khóa chính) là gì? PRIMARY KEY được dùng để xác định mỗi mẫu tin (record) trong bảng là duy nhất . Từ đó nó giúp chúng ta phân biệt được các mẫu tin. Mỗi bảng chỉ có thể tồn tại một PRIMARY KEY. Giá trị PRIMARY KEY của từng mẫu tin phải là duy nhất (không được ...

PRIMARY KEY (Khóa chính) là gì?

PRIMARY KEY được dùng để xác định mỗi mẫu tin (record) trong bảng là duy nhất. Từ đó nó giúp chúng ta phân biệt được các mẫu tin.

Mỗi bảng chỉ có thể tồn tại một PRIMARY KEY.

Giá trị PRIMARY KEY của từng mẫu tin phải là duy nhất (không được trùng nhau).

Ví dụ, có bảng sinh viên như sau:

Full_name
Nguyễn Thành Nhân
Tần Thúc Bảo 
Trình Giảo Kim
Nguyễn Thành Nhân
La Thành
Nguyễn Thành Nhân

Nhận thấy: Ở bảng trên có đến 3 người Nguyễn Thành Nhân, không thể xác định được ai là ai. 

Do đó: Để phân biệt, ta thêm vào bảng một khóa chính có tên là MSSV (mã số sinh viên) như sau:

Mssv Full_name
101 Nguyễn Thành Nhân
102 Tần Thúc Bảo
103 Trình Giảo Kim
104 Nguyễn Thành Nhân
105 La Thành
106 Nguyễn Thành Nhân

Từ đây việc phân biệt các sinh viên đã quá rõ ràng (Ví dụ: nói đến sinh viên Nguyễn Thành Nhân thứ 2 là ta biết người đó có mssv 104).

Ví dụ tạo một bảng sinh viên dùng cột Mssv làm khóa chính

Sử dụng câu lệnh dưới đây để tạo một bảng sinh viên

CREATE TABLE sinh_vien(
    Mssv INT PRIMARY KEY,
    Full_name VARCHAR(150),
    Phone INT,
    Address VARCHAR(255)
);
INSERT INTO sinh_vien (Mssv, Full_name, Phone, Address) VALUES
(101, 'Nguyen Thanh Nhan', 111111111, '111 đường ABC, Cần Thơ'),
(102, 'Pham Thu Huong', 222222222, '222 đường DEF, Cần Thơ'),
(103, 'Nguyen Nhu Ngoc', 333333333, '333 đường GHI, Cần Thơ'),
(104, 'Bui Thanh Bao', 444444444, '444 đường JKL, Cần Thơ'),
(105, 'Le My Nhan', 555555555, '555 đường MNO, Cần Thơ');

Bạn thử thêm vào một sinh viên với các thông tin bất kỳ, nhưng Mssv là một trong 5 Mssv trên, bạn sẽ thấy điều kì diệu

INSERT INTO sinh_vien VALUES (103, 'Tan Thuc Bao', 777777777, '777 đường XYZ, Cần Thơ');

Sau khi chạy câu lệnh, nhận thấy câu lệnh bị lỗi, do Mssv 103 đã tồn tại trong bảng sinh_vien

Ví dụ tạo một bảng sinh viên dùng cột họ tên và địa chỉ nhà làm khóa chính

Ở ví dụ này, chúng ta không dùng mã số sinh viên để làm khóa chính nữa, ta sẽ dùng họ tên và địa chỉ nhà.

Về mặt lý thuyết, hai sinh viên khác nhau không thể có chung một địa chỉ nhà (nếu có cùng địa chỉ nhà thì tức họ là anh em, mà anh em thì tên sẽ khác nhau). Do đó, ta có thể ghép họ tên và địa chỉ nhà lại thành một khóa chính để xác định một sinh viên.

Sử dụng câu lệnh dưới đây để tạo bảng sinh viên

CREATE TABLE sinh_vien(
    Full_name VARCHAR(150),
    Phone INT,
    Address VARCHAR(255),
    CONSTRAINT Name_Address PRIMARY KEY (Full_name, Address)
);
INSERT INTO sinh_vien (Full_name, Phone, Address) VALUES
('Nguyen Thanh Nhan', 111111111, '111 đường ABC, Cần Thơ'),
('Pham Thu Huong', 222222222, '222 đường DEF, Cần Thơ'),
('Nguyen Nhu Ngoc', 333333333, '333 đường GHI, Cần Thơ'),
('Bui Thanh Bao', 444444444, '444 đường JKL, Cần Thơ'),
('Le My Nhan', 555555555, '555 đường MNO, Cần Thơ');

Giải thích câu lệnh trên: Chúng ta ghép Full_name và Address thành một khóa chính có tên là Name_Address. Name_Address không phải là một cột, những nó giúp xác định các mẫu tin bởi cột Full_name và cột Address.

Nếu thêm một mẫu tin có Full_name và Address trùng với một mẫu tin đã tồn tại thì sẽ bị lỗi.

Tạo khóa chính trong trường hợp sửa cấu trúc bảng

Thông thường, khóa chính sẽ được tạo trong lúc tạo bảng. Tuy nhiên, có lúc bảng đã được tạo rồi nhưng chưa có khóa chính, ta sẽ thêm khóa chính vào bằng cách sửa cấu trúc bảng.

ALTER TABLE table_name
ADD PRIMARY KEY (column_name);

Trường hợp khóa chính được ghép bằng nhiều cột

ALTER TABLE table_name
ADD CONSTRAINT primary_key_name PRIMARY KEY (column_name1,column_name2,....);

Xóa khóa chính

Để xóa khóa chính trong bảng, chúng ta sử dụng câu lệnh dưới đây:

ALTER TABLE table_name
DROP PRIMARY KEY;
Bài liên quan

Bài 07: Tạo khóa chính (Primary key) trong MySQL

Giả sử chúng ta có bảng SINHVIEN và mỗi sinh viên là một record, lúc này để nhận diện sinh viên thì ta không thể dựa vào tên của sinh viên được vì tên sinh viên có thể trùng nhau. Chính vì vậy giải pháp là ta thêm một field MaSVvà giá trị của nó cho mỗi SV là khác nhau. Sau đây là một số đặc điểm ...

Trịnh Tiến Mạnh viết 16:39 ngày 01/10/2018

Tìm hiểu tạo khóa chính (Primary key) trong MySQL

Lệnh tạo database (Create Database) trong MySQL Hướng dẫn lệnh tạo bảng (Create Table) trong MySQL Hướng dẫn tạo Unique trong MySQL Tìm hiểu AUTO_INCREMENT trong MySQL Tìm hiểu một số cách tạo khóa chính (Primary key) trong MySQL đơn giản, dễ hiểu bằng cách sử dụng lệnh after và ...

Trịnh Tiến Mạnh viết 17:22 ngày 04/09/2018

Tìm hiểu khóa ngoại (Foreign Key) trong MySQL

Hướng dẫn tạo Unique trong MySQL Tìm hiểu AUTO_INCREMENT trong MySQL Cách thay đổi cấu trúc table với lệnh ALTER TABLE Tìm hiểu lệnh INSERT thêm dữ liệu trong MySQL Tìm hiểu khóa ngoại Foreign key giúp bạn nắm bắt được những kiến thức về khóa ngoại, một số thao tác cách tạo khóa ...

Trịnh Tiến Mạnh viết 17:18 ngày 04/09/2018

Khóa chính PRIMARY KEY trong SQL Server

Cùng học cách tạo, xóa, vô hiệu hóa hoặc kích hoạt khóa chính trong SQL Server với cú pháp và các ví dụ. Khóa chính trong SQL Server là gì? Trong SQL Server (Transact-SQL), khóa chính là một trường hoặc kết hợp nhiều trường và được xác định là một bản ghi ...

Tạ Quốc Bảo viết 11:13 ngày 22/08/2018

(PRIMARY KEY) Tạo khóa chính trong MySQL

PRIMARY KEY (Khóa chính) là gì? PRIMARY KEY được dùng để xác định mỗi mẫu tin (record) trong bảng là duy nhất . Từ đó nó giúp chúng ta phân biệt được các mẫu tin. Mỗi bảng chỉ có thể tồn tại một PRIMARY KEY. Giá trị PRIMARY KEY của từng mẫu tin phải là duy nhất (không được ...

Hoàng Hải Đăng viết 11:05 ngày 18/08/2018
0