Một sequence trong SQL là một tập các số nguyên 1, 2, 3, ... được tạo theo thứ tự theo yêu cầu. Các sequence thường được sử dụng trong cơ sở dữ liệu vì nhiều ứng dụng đòi hỏi mỗi hàng trong một bảng chứa một giá trị duy nhất và sequence cung cấp một cách dễ dàng đáp ứng yêu cầu này.
Bài này mô tả cách sử dụng sequence trong MySQL.
Nội dung chính
Sử dụng cột AUTO_INCREMENT
Cách đơn giản nhất trong MySQL để sử dụng các sequence là định nghĩa một cột là AUTO_INCREMENT.
Ví dụ
Ví dụ sau đây tạo ra một bảng và sau đó nó sẽ chèn một vài hàng trong bảng này, nơi nó không phải yêu cầu phải đưa ra một bản ghi ID vì nó tự động tăng lên bởi MySQL.
Tạo bảo STUDENT:
CREATE TABLE STUDENT ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), name VARCHAR(30) NOT NULL, age INT NOT NULL, address VARCHAR(30) NOT NULL );
Query OK, 0 rows affected (0.02 sec)
Chèn dữ liệu vào bảng STUDENT:
INSERT INTO STUDENT (id, name, age, address) VALUES (NULL, 'Tam', 17, 'Ha Noi'); INSERT INTO STUDENT (id,name, age, address) VALUES (NULL, 'Hai', 19, 'Ha Noi'); INSERT INTO STUDENT (id,name, age, address) VALUES (NULL, 'Ba', 18, 'Ha Noi');
Hoặc có thể không cần insert id:
INSERT INTO STUDENT (name, age, address) VALUES ('Tam', 17, 'Ha Noi'); INSERT INTO STUDENT (id,name, age, address) VALUES ('Hai', 19, 'Ha Noi'); INSERT INTO STUDENT (id,name, age, address) VALUES ('Ba', 18, 'Ha Noi');
Query OK, 3 rows affected (0.02 sec) Records: 3 Duplicates: 0 Warnings: 0
Select dữ liệu từ bẳng STUDENT:
SELECT * FROM STUDENT ORDER BY id;
+----+----------+---------+-----------+ | id | name | age | address | +----+----------+---------+-----------+ | 1 | Tam | 17 | Ha Noi | | 2 | Hai | 19 | Ha Noi | | 3 | Ba | 18 | Ha Noi | +----+----------+---------+-----------+ 3 rows in set (0.00 sec)
Đổi lại thứ tự hiện tại
Có thể có trường hợp bạn đã xóa nhiều bản ghi từ một bảng và bạn muốn sắp xếp lại tất cả các bản ghi. Điều này có thể được thực hiện bằng cách sử dụng một mẹo đơn giản, nhưng bạn nên cẩn thận để làm điều này và kiểm tra xem bảng của bạn có tham gia với một bảng khác hay không.
Nếu bạn xác định rằng resequencing một cột AUTO_INCREMENT là không thể tránh khỏi, cách để làm điều đó là để thả các cột từ bảng, sau đó thêm nó một lần nữa.
Ví dụ sau cho thấy làm thế nào để renumber các giá trị id trong bảng côn trùng sử dụng kỹ thuật này.
ALTER TABLE STUDENT DROP id; ALTER TABLE STUDENT ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);
Bắt đầu một sequence ở một giá trị đặc biệt
Theo mặc định, MySQL sẽ bắt đầu chuỗi từ 1, nhưng bạn cũng có thể chỉ định bất kỳ số nào khác tại thời điểm tạo bảng.
Khối mã sau đây có một ví dụ mà MySQL sẽ bắt đầu sequence từ 100.
CREATE TABLE STUDENT ( id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100, PRIMARY KEY (id), name VARCHAR(30) NOT NULL, age INT NOT NULL, address VARCHAR(30) NOT NULL );
Ngoài ra, bạn có thể tạo bảng và sau đó đặt giá trị sequence ban đầu bằng ALTER TABLE.
ALTER TABLE t AUTO_INCREMENT = 100;