Cách tự động tạo id duy nhất trong mysql?

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

Cách tự động tạo id duy nhất trong mysql?

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

Cách tự động tạo id duy nhất trong mysql?

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()

UUID()

Code language: SQL (Structured Query Language) (sql)

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

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
0 và hàm UUID(), chúng ta sẽ hiển thị một mã định danh duy nhất phổ quát

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)

Và đầu ra là -

Cách tự động tạo id duy nhất trong mysql?

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ố 8

Và đầu ra là -

Cách tự động tạo id duy nhất trong mysql?

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

Cách tự động tạo id duy nhất trong mysql?
bảng ngườ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

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
2 và

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
3 cho việc này

-- 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

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
2. Sau đó, chúng tôi sử dụng câu lệnh

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
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ệnh

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
0 để hiển thị bảng đã cập nhật. Đầu ra là -

Cách tự động tạo id duy nhất trong mysql?

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

Cách tự động tạo id duy nhất trong mysql?

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

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
8. Chúng tôi sẽ cập nhật UUID của hàng với ID = 3. 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);
7

Và đầu ra là -

Cách tự động tạo id duy nhất trong mysql?

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

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
9. Chúng tôi cũng sẽ tuân theo logic trước đó của hàm

SELECT UUID();

Code language: SQL (Structured Query Language) (sql)
8 và xóa bốn dấu gạch ngang. Truy vấn là -

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

Cách tự động tạo id duy nhất trong mysql?


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

Làm cách nào để tự động tạo id trong MySQL?

MySQL có từ khóa AUTO_INCREMENT để thực hiện tự động tăng. Giá trị bắt đầu cho AUTO_INCREMENT là 1, là giá trị mặc định. Nó sẽ tăng thêm 1 cho mỗi bản ghi mới. Để lấy id tăng tự động tiếp theo trong MySQL, chúng ta có thể sử dụng hàm last_insert_id() từ MySQL hoặc auto_increment với SELECT .

Làm cách nào để nhận ID duy nhất trong MySQL?

Hàm UUID() trong MySQL . Nó được thiết kế như một số duy nhất trên toàn cầu.

Làm cách nào để tạo số ngẫu nhiên duy nhất trong MySQL?

Hàm RAND() trả về một số ngẫu nhiên trong khoảng từ 0 (bao gồm) đến 1 (không bao gồm)

Auto_increment trong MySQL là gì?

Tự động tăng cho phép một số duy nhất được tạo tự động khi bản ghi mới được chèn vào bảng . Thường thì đây là trường khóa chính mà chúng tôi muốn được tạo tự động mỗi khi một bản ghi mới được chèn vào.