Thiết lập ID tăng tự động với Identity trong SQL Server
ID tăng tự động là một nhu cầu rất quan trọng trong việc lưu trữ dữ liệu, hầu như tất cả các khóa chính trong các dự án thực tế đều tạo bằng cách cho nó tăng tự động. Vậy làm thế nào để thiết lập tăng tự động? Trong bài này mình sẽ hướng dẫn các bạn.
1. Thuộc tính Identity trong SQL Server
Với MySQL thì chúng ta có thuộc tính auto_increment dùng để xác định một column nào đó tăng tự động, còn SQL Server thì chúng ta có thuộc tính IDENTITY.
Cú pháp của nó như sau:
IDENTITY[(seed,increment)]
Bài viết này được đăng tại [free tuts .net]
Trong đó:
seed
là giá trị được gán cho record đầu tiên lúc insert.increment
là giá trị sẽ tăng lên sau mỗi lần insert.
Ví dụ 1: Thiết lập giá trị của record đầu tiên là 10, record thứ hai là 20, .... tức bước nhảy là 10
IDENTITY (10,10)
Ví dụ 2: Thiết lập giá trị của record đầu tiên là 10, record thứ hai là 15, .... tức bước nhảy là 5.
IDENTITY (10, 5)
2. Ví dụ thực tế với Identity trong SQL Server
Trước tiên bạn hãy tạo một schema tên là hr
.
CREATE SCHEMA hr;
Bước tiếp theo tạo một bảng tên là person, có khóa chính là person_id và tăng tự động với bước nhảy là 1, giá trị khởi tạo là 1.
CREATE TABLE hr.person ( person_id INT IDENTITY(1,1) PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, gender CHAR(1) NOT NULL );
Các ví dụ dưới đây có sử dụng lênh INSERT nên nếu bạn không hiểu thì tạm thời bỏ qua bài này nhé, còn nếu bạn đã biết sơ sơ về lệnh insert thì cứ đọc tiếp.
Thêm record đầu tiên
INSERT INTO hr.person(first_name, last_name, gender) OUTPUT inserted.person_id VALUES('John','Doe', 'M');
Execute hoặc nhấn F5 để chạy câu truy vấn, kết quả bạn sẽ thấy như sau:
Thêm record thứ hai
INSERT INTO hr.person(first_name, last_name, gender) OUTPUT inserted.person_id VALUES('Jane','Doe','F');
Chạy câu SQL này thì kết quả như sau:
Như vậy rõ ràng person_id
được tăng lên 1 cho record tiếp theo.
3. Xóa một record thì ID có được thiết lập lại không?
Điểm đặc biệc giúp Identity truy cập nhanh đó là tăng tự động và không hề thiết lập lại giá trị nếu bại xóa một vài record nào đó.
Ví dụ bạn có một dãy các record từ (1 ...10), trong quá trình sử dụng bạn xóa đi record có id là (4, 5, 6), lúc này dãy các record sẽ bị khuyết 3 giá trị (4, 5, 6). Bây giờ bạn thực hiện thêm mới một record thì ID vẫn tăng lên 11 chứ không lặp lại một trong ba giá trị (4, 5, 6).
Ok, vậy là bạn đã biết cách sử dụng thuộc tính Identity để thiết lập ID tăng tự động rồi đấy, chúc bạn học tốt và hẹn gặp lại ở bài tiếp theo.