Một phương pháp phổ biến và hữu ích là tạo một số duy nhất hoặc ID duy nhất trong một bảng để xác định từng hàng đơn lẻ. Cột như vậy được gọi là khóa thay thế của bảng vì bản chất của nó không liên quan đến nghiệp vụ nên có thể xem là giả tạo. Trong MySQL, có hai cách để tạo khóa như vậy. [1] ID gia tăng tự động;
Phương pháp 1. sử dụng AUTO_INCREMENT
AUTO_INCREMENT có thể được sử dụng khi tạo bảng hoặc khi thêm cột AUTO_INCREMENT mới vào bảng hiện có
Lưu ý rằng PRIMARY KEY phải luôn được chỉ định cùng với AUTO_INCREMENT. Nếu không, bạn sẽ nhận được lỗi sau
Mã lỗi. 1075. Định nghĩa bảng không chính xác;
1. 1 Sử dụng AUTO_INCREMENT khi tạo bảng
Một số duy nhất được tạo tự động cho một bảng khi sử dụng hàm AUTO_INCREMENT trong câu lệnh CREATE TABLE. Nó hướng dẫn MySQL tự động tạo và tăng số nguyên khi bản ghi mới được chèn vào bảng. Giá trị ban đầu sẽ bắt đầu từ 1 và tăng thêm 1 với mỗi lần chèn, trừ khi có quy định khác
Ví dụ mình tạo bảng exam_result như bên dưới. Cột ID được tăng tự động
-- Create table CREATE TABLE exam_result [ ID int[10] unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar[20] NOT NULL, ClassName varchar[20] NOT NULL, StudentMark tinyint NOT NULL ];
Bây giờ thêm một số dữ liệu vào bảng. Lưu ý rằng, chúng ta không cần chỉ định cột ID trong câu lệnh INSERT nếu bạn chỉ định các tên cột khác vì ID được duy trì tự động
-- Insert data to the table insert into exam_result[StudentName,ClassName,StudentMark] values['Anne','Class A',92], ['Gary','Class A',85], ['Tom','Class A',85], ['John','Class A',76], ['Jerry','Class B',95], ['Nick','Class B',91], ['Joe','Class B',88], ['Ted','Class B',88], ['Bob','Class B',82];
Hoặc, nếu bạn bỏ qua tất cả các tên cột trong câu lệnh INSERT, hãy sử dụng từ khóa NULL trong danh sách giá trị làm giá trị cho cột ID. Bằng cách này, ID sẽ được gán cho số thứ tự khả dụng tiếp theo
insert into exam_result values[NULL,'Anne','Class A',92], [NULL,'Gary','Class A',85], [NULL,'Tom','Class A',85], [NULL,'John','Class A',76], [NULL,'Jerry','Class B',95], [NULL,'Nick','Class B',91], [NULL,'Joe','Class B',88], [NULL,'Ted','Class B',88], [NULL,'Bob','Class B',82];
Đã chèn 9 bản ghi
1. 2 Thêm cột AUTO_INCREMENT vào bảng hiện có
Giả sử khi tạo bảng kết quả thi lần đầu, chúng ta không có cột ID
-- Create the table without ID column CREATE TABLE exam_result [ StudentName varchar[20] NOT NULL, ClassName varchar[20] NOT NULL, StudentMark tinyint NOT NULL ]; -- Adding sample data insert into exam_result values['Anne','Class A',92], ['Gary','Class A',85], ['Tom','Class A',85], ['John','Class A',76], ['Jerry','Class B',95], ['Nick','Class B',91], ['Joe','Class B',88], ['Ted','Class B',88], ['Bob','Class B',82];
Bây giờ chúng tôi thực hiện truy vấn ALTER TABLE để thêm cột AUTO_INCREMENT ID
-- Add the ID column alter table exam_result add column ID int[10] unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY;
Lưu ý rằng khi thực hiện câu lệnh thay đổi bảng, cột ID sẽ tự động được điền các ID duy nhất cùng một lúc. Bây giờ hãy chạy select * from exam_result để xem cột ID đã được điền ID duy nhất chưa
9 hồ sơ trả lại
Phương pháp 2. sử dụng hàm ROW_NUMBER
Bạn cũng có thể sử dụng hàm ROW_NUMBER để tạo một cột ID duy nhất. Thông thường ROW_NUMBER được sử dụng để thêm các số duy nhất vào các bản ghi trong một nhóm, nhưng nếu bạn coi toàn bộ bảng là một nhóm, thì một số duy nhất có thể được thêm vào mỗi hàng trên toàn bộ bảng, tương tự như AUTO_INCREMENT thực hiện
Ưu điểm của việc sử dụng ROW_NUMBER thay vì sử dụng AUTO_INCREMENT là các ID được tạo bởi ROW_NUMBER có thể có ý nghĩa kinh doanh trong đó. Đó là nó tạo ra các ID duy nhất dựa trên thứ hạng của các giá trị trong một cột khác. Nhưng nếu bạn không cần lợi thế như vậy, bạn có thể coi các ID duy nhất là nhân tạo hoặc thay thế
Truy vấn bên dưới không sử dụng mệnh đề PARTITION BY coi tất cả các lớp là một nhóm theo nghĩa đen, do đó nó gán một số duy nhất và tăng dần cho mỗi học sinh dựa trên điểm của họ bất kể họ thuộc lớp nào
Trong hướng dẫn này, chúng ta sẽ nghiên cứu chức năng MySQL
insert into exam_result values[NULL,'Anne','Class A',92], [NULL,'Gary','Class A',85], [NULL,'Tom','Class A',85], [NULL,'John','Class A',76], [NULL,'Jerry','Class B',95], [NULL,'Nick','Class B',91], [NULL,'Joe','Class B',88], [NULL,'Ted','Class B',88], [NULL,'Bob','Class B',82];1. Bạn hẳn đã nghe nói về số nhận dạng hoặc số nhận dạng duy nhất. Các ứng dụng mở rộng từ số ghế thi của bạn đến số Thẻ Aadhar/Số SSN của bạn, v.v.
Giả sử bạn có một bảng người trong MySQL và bạn được giao nhiệm vụ gán cho mỗi người trong số họ một mã định danh duy nhất. Có nhiều cách bạn có thể thực hiện việc này – sử dụng thủ công các số ngẫu nhiên, lưu ý rằng giá trị không lặp lại, v.v. Tuy nhiên, MySQL giúp chúng ta dễ dàng. Nó cung cấp cho chúng ta chức năng
insert into exam_result values[NULL,'Anne','Class A',92], [NULL,'Gary','Class A',85], [NULL,'Tom','Class A',85], [NULL,'John','Class A',76], [NULL,'Jerry','Class B',95], [NULL,'Nick','Class B',91], [NULL,'Joe','Class B',88], [NULL,'Ted','Class B',88], [NULL,'Bob','Class B',82];2
Hàm
insert into exam_result values[NULL,'Anne','Class A',92], [NULL,'Gary','Class A',85], [NULL,'Tom','Class A',85], [NULL,'John','Class A',76], [NULL,'Jerry','Class B',95], [NULL,'Nick','Class B',91], [NULL,'Joe','Class B',88], [NULL,'Ted','Class B',88], [NULL,'Bob','Class B',82];2 được sử dụng để trả về Mã định danh duy nhất toàn cầu [UUID] được tạo theo RFC 4122, “Không gian tên URN mã định danh duy nhất toàn cầu [UUID]”
Một điểm quan trọng cần lưu ý về UUID là chúng được thiết kế sao cho chúng là duy nhất trên toàn cầu về không gian và thời gian. Hai UUID không bao giờ giống nhau ngay cả khi chức năng được chạy trên hai thiết bị khác nhau
Giá trị UUID trong MySQL là một số 128 bit được biểu thị dưới dạng một chuỗi utf8 gồm năm số thập lục phân được phân tách bằng dấu '-'. Định dạng như sau -
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
Chúng ta hãy xem cú pháp và một vài ví dụ về chức năng này
Cú pháp của MySQL UUID[]
Code language: SQL [Structured Query Language] [sql]
UUID[]
Ví dụ về MySQL UUID[]
Hãy để chúng tôi bắt đầu mọi thứ với một ví dụ cơ bản. Sử dụng câu lệnh
0 và hàm UUID[], chúng ta sẽ hiển thị một mã định danh duy nhất phổ quátCode language: SQL [Structured Query Language] [sql]
SELECT UUID[];
Code language: SQL [Structured Query Language] [sql]
SELECT UUID[];
Và đầu ra là -
Hiển thị hai UUID khác nhau
Bây giờ chúng ta hãy hiển thị hai UUID trong một truy vấn
________số 8Và đầu ra là -
Như bạn có thể thấy, chúng tôi nhận được hai UUID khác nhau. Sự khác biệt là ở phần đầu tiên của UUID
Làm việc với bảng
Xem xét bảng 'Người' bên dưới
Hãy để chúng tôi tạo một cột có tên là UID lưu trữ một mã định danh duy nhất mà chúng tôi nhận được từ hàm
insert into exam_result values[NULL,'Anne','Class A',92], [NULL,'Gary','Class A',85], [NULL,'Tom','Class A',85], [NULL,'John','Class A',76], [NULL,'Jerry','Class B',95], [NULL,'Nick','Class B',91], [NULL,'Joe','Class B',88], [NULL,'Ted','Class B',88], [NULL,'Bob','Class B',82];1 cho mỗi bản ghi. Chúng tôi sẽ sử dụng câu lệnh
2 vàCode language: SQL [Structured Query Language] [sql]
SELECT UUID[];
3 cho việc nàyCode language: SQL [Structured Query Language] [sql]
SELECT UUID[];
-- Insert data to the table insert into exam_result[StudentName,ClassName,StudentMark] values['Anne','Class A',92], ['Gary','Class A',85], ['Tom','Class A',85], ['John','Class A',76], ['Jerry','Class B',95], ['Nick','Class B',91], ['Joe','Class B',88], ['Ted','Class B',88], ['Bob','Class B',82];1
Chúng tôi tạo một UID cột của loại văn bản bằng cách sử dụng câu lệnh
2. Sau đó, chúng tôi sử dụng câu lệnhCode language: SQL [Structured Query Language] [sql]
SELECT UUID[];
3 để đặt giá trị UUID cho mỗi hàng và cuối cùng, chúng tôi sử dụng câu lệnhCode language: SQL [Structured Query Language] [sql]
SELECT UUID[];
0 để hiển thị bảng đã cập nhật. Đầu ra là -Code language: SQL [Structured Query Language] [sql]
SELECT UUID[];
Bây giờ chúng ta hãy cập nhật giá trị UID cho bản ghi có ID là 2. Truy vấn là -
-- Insert data to the table insert into exam_result[StudentName,ClassName,StudentMark] values['Anne','Class A',92], ['Gary','Class A',85], ['Tom','Class A',85], ['John','Class A',76], ['Jerry','Class B',95], ['Nick','Class B',91], ['Joe','Class B',88], ['Ted','Class B',88], ['Bob','Class B',82];5
Và đầu ra là -
Như bạn có thể thấy, mỗi khi chúng ta chạy hàm
insert into exam_result values[NULL,'Anne','Class A',92], [NULL,'Gary','Class A',85], [NULL,'Tom','Class A',85], [NULL,'John','Class A',76], [NULL,'Jerry','Class B',95], [NULL,'Nick','Class B',91], [NULL,'Joe','Class B',88], [NULL,'Ted','Class B',88], [NULL,'Bob','Class B',82];1, chúng ta sẽ nhận được một UUID khác
Tùy chỉnh UUID
Chúng tôi đã thấy các UUID khác nhau được trả về ở trên là các ký tự có thể đọc được. Tuy nhiên, bốn dấu gạch ngang trong UUID về cơ bản là không cần thiết. Chúng tôi có khả năng sửa đổi UUID mà không ảnh hưởng đến khía cạnh “độc nhất” của nó
Đây là một cách mà chúng ta có thể làm cho UUID của mình nhỏ gọn hơn bằng cách sử dụng hàm
8. Chúng tôi sẽ cập nhật UUID của hàng với ID = 3. Truy vấn là -Code language: SQL [Structured Query Language] [sql]
SELECT UUID[];
-- Insert data to the table insert into exam_result[StudentName,ClassName,StudentMark] values['Anne','Class A',92], ['Gary','Class A',85], ['Tom','Class A',85], ['John','Class A',76], ['Jerry','Class B',95], ['Nick','Class B',91], ['Joe','Class B',88], ['Ted','Class B',88], ['Bob','Class B',82];7
Và đầu ra là -
Như bạn có thể thấy, chúng tôi đã làm cho UUID của mình nhỏ gọn hơn và tùy chỉnh nó mà không ảnh hưởng đến phần “độc nhất” của nó
Có một cách khác để tùy chỉnh UUID của bạn mà không thay đổi bit "duy nhất"
Tôi đã đề cập ở phần đầu rằng UUID là một số 128 bit được biểu thị dưới dạng một chuỗi utf8 gồm năm số thập lục phân
Chúng ta có thể chuyển đổi nó sang các ký hiệu khác. Trong truy vấn bên dưới, chúng tôi chuyển đổi nó thành ký hiệu base64 bằng cách sử dụng hàm
9. Chúng tôi cũng sẽ tuân theo logic trước đó của hàmCode language: SQL [Structured Query Language] [sql]
SELECT UUID[];
8 và xóa bốn dấu gạch ngang. Truy vấn là -Code language: SQL [Structured Query Language] [sql]
SELECT UUID[];
insert into exam_result values[NULL,'Anne','Class A',92], [NULL,'Gary','Class A',85], [NULL,'Tom','Class A',85], [NULL,'John','Class A',76], [NULL,'Jerry','Class B',95], [NULL,'Nick','Class B',91], [NULL,'Joe','Class B',88], [NULL,'Ted','Class B',88], [NULL,'Bob','Class B',82];0
Và đầu ra là -
Phần kết luận
Tạo số nhận dạng duy nhất hoặc UUID có một loạt các ứng dụng. Hàm
insert into exam_result values[NULL,'Anne','Class A',92], [NULL,'Gary','Class A',85], [NULL,'Tom','Class A',85], [NULL,'John','Class A',76], [NULL,'Jerry','Class B',95], [NULL,'Nick','Class B',91], [NULL,'Joe','Class B',88], [NULL,'Ted','Class B',88], [NULL,'Bob','Class B',82];2 rất quan trọng và tôi khuyến khích bạn kiểm tra các tài liệu tham khảo bên dưới để biết thêm thông tin chi tiết