Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng ràng buộc khóa chính của MySQL để tạo khóa chính cho một bảng
Giới thiệu về khóa chính MySQL
Khóa chính là một cột hoặc một tập hợp các cột xác định duy nhất mỗi hàng trong bảng. Khóa chính tuân theo các quy tắc này
- Khóa chính phải chứa các giá trị duy nhất. Nếu khóa chính bao gồm nhiều cột, tổ hợp các giá trị trong các cột này phải là duy nhất
- Cột khóa chính không được có giá trị
1. Mọi nỗ lực chèn hoặc cập nhật
Code language: SQL [Structured Query Language] [sql]CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
2 vào cột khóa chính sẽ dẫn đến lỗi. Lưu ý rằng MySQL ngầm thêm một ràng buộc
Code language: SQL [Structured Query Language] [sql]CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
3 vào các cột khóa chính
Code language: SQL [Structured Query Language] [sql]CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
- Một bảng có thể có một và duy nhất một khóa chính
Vì MySQL hoạt động nhanh hơn với số nguyên nên kiểu dữ liệu của cột khóa chính phải là số nguyên e. g. ,
4Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
5. Và bạn nên đảm bảo rằng phạm vi giá trị của loại số nguyên cho khóa chính là đủ để lưu trữ tất cả các hàng có thể có mà bảng có thể cóCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Cột khóa chính thường có thuộc tính
6 tự động tạo một số nguyên tuần tự bất cứ khi nào bạn chèn một hàng mới vào bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Khi bạn xác định khóa chính cho một bảng, MySQL sẽ tự động tạo một chỉ mục có tên là
7Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
MySQL CREATE TABLE table_name[
primary_key_column1 datatype,
primary_key_column2 datatype,
...,
PRIMARY KEY[column_list]
];
Code language: SQL [Structured Query Language] [sql]
8 ví dụ
CREATE TABLE table_name[
primary_key_column1 datatype,
primary_key_column2 datatype,
...,
PRIMARY KEY[column_list]
];
Ràng buộc
8 cho phép bạn xác định khóa chính của bảng khi bạn tạo hoặc thay đổi bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
1] Xác định ràng buộc CREATE TABLE table_name[
primary_key_column1 datatype,
primary_key_column2 datatype,
...,
PRIMARY KEY[column_list]
];
Code language: SQL [Structured Query Language] [sql]
8 trong CREATE TABLE table_name [
primary_key_column datatype,
.. ,
PRIMARY KEY[primary_key_column]
];
Code language: SQL [Structured Query Language] [sql]
1
CREATE TABLE table_name[
primary_key_column1 datatype,
primary_key_column2 datatype,
...,
PRIMARY KEY[column_list]
];
CREATE TABLE table_name [
primary_key_column datatype,
.. ,
PRIMARY KEY[primary_key_column]
];
Thông thường, bạn xác định khóa chính cho một bảng trong câu lệnh
2Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
Nếu khóa chính có một cột, bạn có thể sử dụng ràng buộc
8 làm ràng buộc cộtCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
CREATE TABLE table_name[ primary_key_column datatype PRIMARY KEY, ... ];
Code language: SQL [Structured Query Language] [sql]
Khi khóa chính có nhiều hơn một cột, bạn phải sử dụng ràng buộc
8 làm ràng buộc bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Trong cú pháp này, bạn phân tách các cột trong
5 bằng dấu phẩy [,]Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
Có thể sử dụng ràng buộc bảng
8 khi khóa chính có một cộtCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
Ví dụ sau tạo một bảng tên là
7 có khóa chính là cộtCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
8Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE users[ user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR[40], password VARCHAR[255], email VARCHAR[255] ];
Câu lệnh này tạo bảng
9 có ràng buộcCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
8 làm ràng buộc bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE roles[ role_id INT AUTO_INCREMENT, role_name VARCHAR[50], PRIMARY KEY[role_id] ];
Trong trường hợp khóa chính bao gồm nhiều cột, bạn phải chỉ định chúng ở cuối câu lệnh
1. Bạn đặt một danh sách các cột khóa chính được phân tách bằng dấu phẩy bên trong dấu ngoặc đơn theo sau từ khóaCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
8Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Ví dụ sau tạo bảng
3 có khóa chính gồm hai cột.Code language: SQL [Structured Query Language] [sql]
CREATE TABLE users[ user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR[40], password VARCHAR[255], email VARCHAR[255] ];
8 vàCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
5. Nó định nghĩa ràng buộcCode language: SQL [Structured Query Language] [sql]
CREATE TABLE users[ user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR[40], password VARCHAR[255], email VARCHAR[255] ];
8 là ràng buộc bảng
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Code language: SQL [Structured Query Language] [sql]
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
Lưu ý rằng câu lệnh cũng tạo ra hai ràng buộc khóa ngoại
2] Xác định ràng buộc CREATE TABLE table_name[
primary_key_column1 datatype,
primary_key_column2 datatype,
...,
PRIMARY KEY[column_list]
];
Code language: SQL [Structured Query Language] [sql]
8 bằng cách sử dụng CREATE TABLE users[
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR[40],
password VARCHAR[255],
email VARCHAR[255]
];
Code language: SQL [Structured Query Language] [sql]
8
CREATE TABLE table_name[
primary_key_column1 datatype,
primary_key_column2 datatype,
...,
PRIMARY KEY[column_list]
];
CREATE TABLE users[
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR[40],
password VARCHAR[255],
email VARCHAR[255]
];
Nếu một bảng vì lý do nào đó không có khóa chính, bạn có thể sử dụng câu lệnh
9 để thêm khóa chính vào bảng như sauCode language: SQL [Structured Query Language] [sql]
CREATE TABLE users[ user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR[40], password VARCHAR[255], email VARCHAR[255] ];
Code language: SQL [Structured Query Language] [sql]
ALTER TABLE table_name ADD PRIMARY KEY[column_list];
Ví dụ sau thêm cột
0 vào khóa chínhCode language: SQL [Structured Query Language] [sql]
CREATE TABLE roles[ role_id INT AUTO_INCREMENT, role_name VARCHAR[50], PRIMARY KEY[role_id] ];
Đầu tiên, tạo bảng
1 không có khóa chínhCode language: SQL [Structured Query Language] [sql]
CREATE TABLE roles[ role_id INT AUTO_INCREMENT, role_name VARCHAR[50], PRIMARY KEY[role_id] ];
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE pkdemos[ id INT, title VARCHAR[255] NOT NULL ];
Thứ hai, thêm khóa chính vào bảng
1 bằng cách sử dụng câu lệnhCode language: SQL [Structured Query Language] [sql]
CREATE TABLE roles[ role_id INT AUTO_INCREMENT, role_name VARCHAR[50], PRIMARY KEY[role_id] ];
8Code language: SQL [Structured Query Language] [sql]
CREATE TABLE users[ user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR[40], password VARCHAR[255], email VARCHAR[255] ];
Code language: SQL [Structured Query Language] [sql]
ALTER TABLE pkdemos ADD PRIMARY KEY[id];
Nếu bạn thêm khóa chính vào bảng đã có dữ liệu. Dữ liệu trong [các] cột sẽ được đưa vào khóa chính phải là duy nhất và không phải NULL
CREATE TABLE table_name[
primary_key_column1 datatype,
primary_key_column2 datatype,
...,
PRIMARY KEY[column_list]
];
Code language: SQL [Structured Query Language] [sql]
8 so với. CREATE TABLE roles[
role_id INT AUTO_INCREMENT,
role_name VARCHAR[50],
PRIMARY KEY[role_id]
];
Code language: SQL [Structured Query Language] [sql]
5 so với. CREATE TABLE roles[
role_id INT AUTO_INCREMENT,
role_name VARCHAR[50],
PRIMARY KEY[role_id]
];
Code language: SQL [Structured Query Language] [sql]
6
CREATE TABLE table_name[
primary_key_column1 datatype,
primary_key_column2 datatype,
...,
PRIMARY KEY[column_list]
];
CREATE TABLE roles[
role_id INT AUTO_INCREMENT,
role_name VARCHAR[50],
PRIMARY KEY[role_id]
];
CREATE TABLE roles[
role_id INT AUTO_INCREMENT,
role_name VARCHAR[50],
PRIMARY KEY[role_id]
];
6 là từ đồng nghĩa vớiCode language: SQL [Structured Query Language] [sql]
CREATE TABLE roles[ role_id INT AUTO_INCREMENT, role_name VARCHAR[50], PRIMARY KEY[role_id] ];
8. Bạn sử dụng
CREATE TABLE roles[ role_id INT AUTO_INCREMENT, role_name VARCHAR[50], PRIMARY KEY[role_id] ];
Code language: SQL [Structured Query Language] [sql]
6 khi muốn tạo chỉ mục cho một cột hoặc một nhóm cột không phải là một phần của khóa chính hoặc khóa duy nhấtCode language: SQL [Structured Query Language] [sql]
CREATE TABLE roles[ role_id INT AUTO_INCREMENT, role_name VARCHAR[50], PRIMARY KEY[role_id] ];
Chỉ mục
0 đảm bảo rằng các giá trị trong một cột phải là duy nhất. Không giống như chỉ mụcCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
7, MySQL cho phép các giá trịCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
2 trong chỉ mụcCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
3. Ngoài ra, một bảng có thể có nhiềuCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
3 chỉ mụcCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
Giả sử rằng
5 vàCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
6 của người dùng trong bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
7 phải là duy nhất. Để thực thi các quy tắc này, bạn có thể xác định các chỉ mụcCode language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name [ primary_key_column datatype, .. , PRIMARY KEY[primary_key_column] ];
3 cho các cộtCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
5 vàCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
6 như câu lệnh sauCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
Thêm chỉ mục
3 cho cộtCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
6Code language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
Code language: SQL [Structured Query Language] [sql]
ALTER TABLE users ADD UNIQUE INDEX username_unique [username ASC] ;
Thêm chỉ mục
3 cho cộtCode language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
5Code language: SQL [Structured Query Language] [sql]
CREATE TABLE user_roles[ user_id INT, role_id INT, PRIMARY KEY[user_id,role_id], FOREIGN KEY[user_id] REFERENCES users[user_id], FOREIGN KEY[role_id] REFERENCES roles[role_id] ];
0Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table_name[ primary_key_column1 datatype, primary_key_column2 datatype, ..., PRIMARY KEY[column_list] ];
Trong hướng dẫn này, bạn đã học cách tạo khóa chính cho bảng mới hoặc thêm khóa chính vào bảng hiện có