Tùy chọn AUTO_INCREMENT cho phép bạn tự động tạo các số nguyên duy nhất [ID, danh tính, trình tự] cho một cột
Ví dụ nhanh
-- Define a table with an auto-increment column [id starts at 100] CREATE TABLE airlines [ id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR[90] ] AUTO_INCREMENT = 100; -- Insert a row, ID will be automatically generated INSERT INTO airlines [name] VALUES ['United Airlines']; -- Get generated ID SELECT LAST_INSERT_ID[]; -- Returns: 100
Tổng quan
Giá trị bắt đầuthen new IDs with start from this value + 1Restart [Reset]ALTER TABLE table_name AUTO_INCREMENT = new_start_value;
Để tạo một giá trị ID, bạn có thể bỏ qua cột tăng tự động trong câu lệnh INSERT hoặc chỉ định rõ ràng giá trị NULL hoặc 0
-- Omit auto-increment column INSERT INTO airlines [name] VALUES ['Delta']; -- Specify NULL or 0 INSERT INTO airlines VALUES [NULL, 'Southwest']; INSERT INTO airlines VALUES [0, 'American Airlines'];
Bạn có thể chèn một giá trị ID một cách rõ ràng, sau đó MySQL sẽ tạo ID mới bắt đầu từ nó thêm 1
INSERT INTO airlines VALUES [200, 'Lufthansa']; INSERT INTO airlines [name] VALUES ['British Airways']; -- id 201 is assigned
Bạn vẫn có thể chèn vào bên trong khoảng trống bằng ID nhỏ hơn ID tối đa hiện tại, nhưng điều này không ảnh hưởng đến ID sẽ được sử dụng cho các hàng khác
INSERT INTO airlines VALUES [150, 'Air France']; -- id 150 inserted INSERT INTO airlines [name] VALUES ['KLM']; -- id 202 is assigned
Bảng nội dung
idname100United Airlines101Delta102Southwest103American Airlines150Air France200Lufthansa201British Airways202KLMHàm LAST_INSERT_ID trả về ID của hàng được chèn thành công đầu tiên. Ví dụ: trong INSERT nhiều hàng
INSERT IGNORE INTO airlines VALUES [150, 'North Air'], -- this row will be skipped as ID 150 already exists, and IGNORE option used [0, 'Emirates'], -- id 203 is assigned [0, 'Qantas']; -- id 204 SELECT LAST_INSERT_ID[]; -- Returns: 203
Bạn không thể đặt lại bộ đếm tăng tự động về giá trị bắt đầu nhỏ hơn hoặc bằng ID tối đa hiện tại
ALTER TABLE airlines AUTO_INCREMENT = 1; INSERT INTO airlines [name] VALUES ['US Airways']; -- id 205 is assigned
Sau khi bạn đã xóa tất cả các hàng, bộ đếm không tự động được đặt lại về giá trị bắt đầu
DELETE FROM airlines; INSERT INTO airlines [name] VALUES ['United']; -- id 206 is assigned
Bạn có thể khởi động lại tự động tăng lên 1 nếu không có hàng nào trong bảng
DELETE FROM airlines; ALTER TABLE airlines AUTO_INCREMENT = 1; INSERT INTO airlines [name] VALUES ['United']; -- id 1 is assigned
Cột tự động tăng trong cơ sở dữ liệu khác
tiên tri
Tự động tăng hoặc nhận dạngMáy chủ SQL
IDENTITY[bắt đầu, gia số]PostgreSQL
SERIAL Data TypeStart ValueChuyển đổi MySQL AUTO_INCREMENT
tiên tri
Oracle không hỗ trợ thuộc tính AUTO_INCREMENT [IDENTITY] trên một cột, nhưng chức năng này có thể được triển khai bằng trình tự và trình kích hoạt
________số 8Lưu ý rằng cần có trình kích hoạt vì Oracle không cho phép sử dụng mệnh đề NEXTVAL trong DEFAULT cho một cột
Máy chủ SQL
SQL Server hỗ trợ thuộc tính IDENTITY và cho phép bạn chỉ định số gia tăng
CREATE TABLE airlines [ id INT IDENTITY[100, 1] PRIMARY KEY, name VARCHAR[90] ];
PostgreSQL
PostgreSQL hỗ trợ kiểu dữ liệu SERIAL cho phép bạn tự động tạo ID. Mặc dù SERIAL không cung cấp các tùy chọn để đặt giá trị ban đầu và giá trị gia tăng, nhưng bạn có thể sửa đổi đối tượng trình tự bên dưới