Như ta biết mỗi table thông thường chúng ta sẽ có một khóa chính nhằm mục đích phân biệt giữa các dòng (records) dữ liệu trong MySQL. Khi làm ứng dụng website thì để tối ưu hóa tốc độ thì thông thường chúng ta sẽ chọn khóa chính là kiểu
INT
và nó sẽ tăng tự động, nghĩa là khi ban thêm một dòng dữ liệu thì không cần phải truyền khóa chính mà nó sẽ tự động tăng lên 1 khi thêm mới.1. Đặc điểm của khóa chính (Primary key)
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 MaSV
và giá trị của nó cho mỗi SV là khác nhau.
Sau đây là một số đặc điểm của khóa chính trong MySQL nói chung và trong các mô hình CSDL nói riêng:
- Giá trị của khóa chính là duy nhất cho mỗi record, nghĩa là không thể tồn tại hai record có cùng khóa chính
- Khóa chính không thể cho phép
NULL
được. - Mỗi bảng chỉ tồn tại duy nhất một khóa chính, mỗi khóa chính có thể có nhiều column.
Bởi vì trong MySQL hoạt động với kiểu số sẽ nhanh hơn kiểu chuỗi nên ta sẽ chọn kiểu
INT (INT, BIGINT, ..)
cho nó, sau khi chạy code tạo khóa chính thì nó sẽ tạo một chỉ mục có tên là PRIMARY
và đây chính là chỉ mục khóa chính.2. Tạo khóa chính (Primary key) trong MySQL
Thông thường chúng ta có hai cách tạo khóa chính đó là tạo luôn trong quá trình tạo bảng (create table) hoặc là tạo bảng trước rồi tạo khóa chính sau. Sau đây là các ví dụ về hai cách này.
Tạo trong lệnh tạo bảng Create Table
Để chọn field cho khóa chính ta sẽ đặt từ khóa primary key đằng sau column đó, ví dụ:
1
2
3
4
| CREATE TABLE users ( id INT (10) UNSIGNED NOT NULL PRIMARY KEY , email VARCHAR (70) NOT NULL ) ENGINE = INNODB; |
PRIMARY KEY(field)
đặt ở cuối các fields trong lệnh tạo bảng, ví dụ:
1
2
3
4
5
| CREATE TABLE users ( id INT (10) UNSIGNED NOT NULL , email VARCHAR (70) NOT NULL , PRIMARY KEY (id) ) ENGINE = INNODB; |
Chọn nhiều fields làm khóa chính
Để chọn nhiều fields làm khóa chính thì ta sử dụng lệnh
PRIMARY KEY(field1, field2, ..)
và đặt nó ở cuối danh sách các field trong lệnh tạo bảng, ví dụ:
1
2
3
4
5
| CREATE TABLE users ( id INT (10) UNSIGNED NOT NULL , email VARCHAR (70) NOT NULL , PRIMARY KEY (id, email) ) ENGINE = INNODB; |
Sử dụng lệnh Alter để tạo khóa chính
Thông thường cách này sử dụng trong trường hợp ta tạo bảng trước rồi sau đó tạo khóa chính sau. Ta sẽ sử dụng cú pháp sau để tạo:
1
| ALTER TABLE table_name ADD PRIMARY KEY (primary_key_column); |
1
2
3
4
5
6
| CREATE TABLE users ( id INT (10) UNSIGNED NOT NULL , email VARCHAR (70) NOT NULL ) ENGINE = INNODB; ALTER TABLE users ADD PRIMARY KEY (id) |
Sử dụng CONSTRAINT đặt tên cho khóa chính
Cách này khuyến khích sử dụng khi sử dụng lệnh
CONSTRAINT
chúng ta có thể tạo tên cho khóa chính, nhờ đó sau này ta sẽ dễ quản lý hơn. Sau đây là một số ví dụ sử dụng CONSTRAINT
để tạo khóa chính:
1
2
3
4
5
| CREATE TABLE users ( id INT (10) UNSIGNED NOT NULL , email VARCHAR (70) NOT NULL , CONSTRAINT pk_user PRIMARY KEY (id) ) ENGINE = INNODB; |
1
2
3
4
5
6
| CREATE TABLE users ( id INT (10) UNSIGNED NOT NULL , email VARCHAR (70) NOT NULL ) ENGINE = INNODB; ALTER TABLE users ADD CONSTRAINT pk_user PRIMARY KEY (id) |
3. Xóa khóa chính (Drop Primary Key)
Để xóa khóa chính thì chúng ta sử dụng lệnh
ALTER TABLE
kết hợp với DROP
, ví dụ:
1
| ALTER TABLE users DROP PRIMARY KEY |
# Lời kết
Chúng ta chỉ sử dụng hai cách trên để tạo khóa chính tron MySQL thôi, vài không chỉ có ở MySQL mà ở SQL Server cũng có cú pháp tương tự vì chúng để sử dụng ngôn ngữ
T-SQL
. Bài tiếp theo chúng ta sẽ tìm hiểu một loại index cũng tương tự như khóa chính đó là UNIQUE
, tuy à tương tự nhưng nó sẽ có sự khác nhau đấy.
Nguồn: (code.freetuts.net)
0 nhận xét: