Thứ Ba, 25 tháng 7, 2023

Tạo khóa chính (Primary key) trong MySQL

Mỗi table thông thường sẽ có một khóa chính nhằm phân biệt dữ liệu giữa các record trong table. Khi làm các ứng dụng website và để tối ưu tốc độ truy vấn thì thông thường chúng ta sẽ chọn khóa chính là kiểu INT và thiết lập tăng tự động, nghĩa là khi bạn 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.

Mục lục

  • 1. Đặc điểm của khóa chính (Primary key)
  • 2. Tạo khóa chính (Primary key) trong MySQL
    • Tạo trong lệnh tạo bảng Create Table
    • Chọn nhiều fields làm khóa chính
    •  Sử dụng lệnh alter để tạo khóa chính
    • Sử dụng CONSTRAINT đặt tên cho khóa chính
  • 3. Xóa khóa chính (Drop Primary Key)
  • 4. Lời kết

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 phân biệt giữa các 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 ta chọn giải pháp là ta thêm một field MaSV dùng để làm khóa chính và giá trị của nó là duy nhất nên có thể phân biệt giữa các sinh viên với 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 trùng khóa chính
  • Khóa chính không thể cho phép NULL .
  • 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, ..), 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.

Bài viết này được đăng tại tranvanbinh.vn

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;
Hoặc ta sẽ dùng lệnh 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);
Ví dụ:

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;
Hoặc:

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

4. 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à 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.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master