Chúng ta sẽ tìm hiểu làm cách nào để tự động tăng giá trị của một or nhiều cột trong một bảng với SQL.

1. Trường AUTO INCREMENT

Tự động tăng cho phép một số duy nhất được tạo tự động khi một dữ liệu 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.

2. Cú pháp

Câu lệnh SQL sau xác định cột “Personid” là trường khóa chính tự động tăng dần trong bảng “Persons”:

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

CREATE TABLE Persons (
    Personid int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (Personid)
); 

MySQL sử dụng từ khóa AUTO_INCREMENT để thực hiện tính năng tự động tăng.

Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT là 1 và nó sẽ tăng lên 1 cho mỗi dữ liệu mới.

Để để trình tự AUTO_INCREMENT bắt đầu bằng một giá trị khác, hãy sử dụng câu lệnh SQL sau:

ALTER TABLE Persons AUTO_INCREMENT=100; 

Để chèn một bản ghi mới vào bảng “Persons”, chúng tôi sẽ KHÔNG phải chỉ định giá trị cho cột “Personid” (một giá trị duy nhất sẽ được thêm tự động):

INSERT INTO Persons (FirstName,LastName)
VALUES ('XUAN','David'); 

Câu lệnh SQL ở trên sẽ chèn một bản ghi mới vào bảng “Persons”. Cột “Personid” sẽ được gán một giá trị duy nhất. Cột “FirstName” sẽ được đặt thành “XUAN” và cột “LastName” sẽ được đặt thành “David”.

3. Cú pháp cho SQL Server

Câu lệnh SQL sau xác định cột “Personid” là trường khóa chính tự động tăng dần trong bảng “Persons”:

CREATE TABLE Persons (
    Personid int IDENTITY(1,1) PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
); 

MS SQL Server sử dụng từ khóa IDENTITY để thực hiện tính năng tự động tăng.

Trong ví dụ trên, giá trị bắt đầu cho IDENTITY là 1 và nó sẽ tăng lên 1 cho mỗi dữ liệu mới.

Mẹo: Để chỉ định rằng cột “Personid” phải bắt đầu ở giá trị 10 và tăng lên 5, hãy thay đổi nó thành IDENTITY (10,5).

Để chèn một dữ liệu mới vào bảng “Persons”, chúng tôi sẽ KHÔNG phải chỉ định giá trị cho cột “Personid” (một giá trị duy nhất sẽ được thêm tự động):

INSERT INTO Persons (FirstName,LastName)
VALUES ('XUAN','David');

4. Cú pháp cho Access

Câu lệnh SQL sau xác định cột “Personid” là trường khóa chính tự động tăng dần trong bảng “Persons”:

CREATE TABLE Persons (
    Personid AUTOINCREMENT PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
); 

MS Access sử dụng từ khóa AUTOINCREMENT để thực hiện tính năng tự động tăng.

Theo mặc định, giá trị bắt đầu cho AUTOINCREMENT là 1 và nó sẽ tăng lên 1 cho mỗi bản ghi mới.

Mẹo: Để chỉ định rằng cột “Personid” phải bắt đầu ở giá trị 10 và tăng lên 5, hãy thay đổi tự động tăng thành AUTOINCREMENT(10,5).

Để chèn một dữ liệu mới vào bảng “Persons”, chúng tôi sẽ KHÔNG phải chỉ định giá trị cho cột “Personid” (một giá trị duy nhất sẽ được thêm tự động):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Xuan','David'); 

Câu lệnh SQL ở trên sẽ chèn một dữ liệu mới vào bảng “Người”. Cột “Personid” sẽ được gán một giá trị duy nhất. Cột “FirstName” sẽ được đặt thành “Xuan” và cột “LastName” sẽ được đặt thành “David”.

5. Cú pháp cho Oracle

Trong Oracle, code phức tạp hơn một chút.

Bạn sẽ phải tạo một trường tăng tự động với đối tượng chuỗi (đối tượng này tạo ra một chuỗi số).

Sử dụng cú pháp CREATE SEQUENCE sau:

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10; 

Đoạn code trên tạo một đối tượng trình tự được gọi là seq_woman, bắt đầu bằng 1 và sẽ tăng lên 1. Nó cũng sẽ lưu vào bộ nhớ cache tối đa 10 giá trị cho hiệu suất. Tùy chọn bộ nhớ cache chỉ định số lượng giá trị trình tự sẽ được lưu trữ trong bộ nhớ để truy cập nhanh hơn.

Để chèn một dữ liệu mới vào bảng “Persions”, chúng ta sẽ phải sử dụng hàm tiếp theo (hàm này lấy giá trị tiếp theo từ chuỗi seq_ person):

INSERT INTO Persons (Personid,FirstName,LastName)
VALUES (seq_person.nextval,'Xuan','David'); 

Câu lệnh SQL ở trên sẽ chèn một dữ liệu mới vào bảng “Persions”. Cột “Personid” sẽ được gán số tiếp theo từ trình tự seq_ person. Cột “FirstName” sẽ được đặt thành “Xuan” và cột “LastName” sẽ được đặt thành “David”.

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!