Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách sử dụng thuộc tính IDENTITY () trong SQL Server

Khi bạn sử dụng T-SQL để tạo (hoặc thay đổi) bảng trong SQL Server, bạn có tùy chọn sử dụng IDENTITY() thuộc tính để tạo một cột nhận dạng.

Cột nhận dạng chứa số nhận dạng tự động tăng dần. IDENTITY() có thể được sử dụng với CREATE TABLEALTER TABLE tuyên bố.

Cú pháp

Cú pháp như sau:

IDENTITY [ (seed , increment) ]

hạt giống là giá trị được sử dụng cho hàng đầu tiên được tải vào bảng.

Phần tăng là giá trị gia tăng được thêm vào giá trị nhận dạng của hàng trước đó đã được tải.

Bạn phải chỉ định cả hai đối số hoặc không. Nếu bạn không chỉ định, giá trị mặc định là (1,1) .

Ví dụ 1 - Cách sử dụng cơ bản

Đây là một ví dụ để chứng minh.

CREATE TABLE Pets (
    PetId int IDENTITY(1,1) PRIMARY KEY, 
    PetName varchar(255)
    );

Mã này tạo một bảng có hai cột. Cột đầu tiên (PetId ) là cột nhận dạng vì tôi sử dụng IDENTITY() tài sản trong định nghĩa của nó.

Bây giờ tôi đã tạo cột nhận dạng, tôi có thể chèn tên vật nuôi vào PetName mà không cần bao gồm ID cho mỗi hàng.

INSERT INTO Pets (PetName)
VALUES ('Homer'), ('Felix'), ('Ruff');

SELECT * FROM Pet;

Kết quả:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Homer     |
| 2       | Felix     |
| 3       | Ruff      |
+---------+-----------+

Ví dụ 2 - Hạt giống và Sự gia tăng khác nhau

Dưới đây là một ví dụ sử dụng hạt giống và giá trị gia tăng khác.

Trong trường hợp này, hạt giống bắt đầu từ 150 và tăng thêm 10 cho mỗi hàng.

CREATE TABLE Cities (
    CityId int IDENTITY(150, 10) PRIMARY KEY, 
    CityName varchar(255)
    );

Bây giờ, hãy chèn một số dữ liệu và chọn nó:

INSERT INTO Cities (CityName)
VALUES ('Auckland'), ('Danang'), ('Khon Kaen');

SELECT * FROM Cities;

Kết quả:

+----------+------------+
| CityId   | CityName   |
|----------+------------|
| 150      | Auckland   |
| 160      | Danang     |
| 170      | Khon Kaen  |
+----------+------------+

Ví dụ 3 - Sử dụng Không chính xác

Như đã đề cập, bạn phải chỉ định cả hai đối số hoặc không. Nói cách khác, bạn không thể cung cấp chỉ một đối số. Dưới đây là một ví dụ về những gì sẽ xảy ra khi bạn chỉ cung cấp một đối số.

CREATE TABLE Cities (
    CityId int IDENTITY(1) PRIMARY KEY, 
    CityName varchar(255)
    );

Kết quả:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ')'.

Ví dụ 4 - Cố gắng Ghi đè Giá trị Nhận dạng

Nếu bạn cố gắng ghi đè các giá trị nhận dạng tự động, bạn có thể gặp phải lỗi như thế này.

INSERT INTO Cities (CityId, CityName)
VALUES (123, 'Bangkok');

Kết quả:

Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'Cities' when IDENTITY_INSERT is set to OFF.

Điều này là do bạn đang cố gắng ghi đè các giá trị được tạo bởi IDENTITY() bất động sản. Trong nhiều trường hợp, có thể bạn không biết đó là cột nhận dạng. Trong những trường hợp như vậy, tất cả những gì bạn cần làm là xóa cột nhận dạng khỏi INSERT của bạn tuyên bố.

Tuy nhiên, nếu bạn thực sự làm cần ghi đè IDENTITY() , hãy xem Cách Chèn Giá trị vào Cột IDENTITY trong SQL Server.

Như đã đề cập, nếu bạn không cần ghi đè các giá trị nhận dạng, bạn có thể chỉ cần xóa cột đó khỏi INSERT của mình tuyên bố.

Vì vậy, tôi có thể sửa đổi câu lệnh trước thành điều này:

INSERT INTO Cities (CityName)
VALUES ('Bangkok');

SELECT * FROM Cities;

Kết quả:

+----------+------------+
| CityId   | CityName   |
|----------+------------|
| 150      | Auckland   |
| 160      | Danang     |
| 170      | Khon Kaen  |
| 180      | Bangkok    |
+----------+------------+

Hạn chế của thuộc tính IDENTITY ()

Thuộc tính nhận dạng trên một cột đảm bảo những điều sau:

  • Mỗi giá trị mới được tạo dựa trên nguồn gốc và phần tăng thêm hiện tại.
  • Mỗi giá trị mới cho một giao dịch cụ thể khác với các giao dịch đồng thời khác trên bảng.

Nó không đảm bảo những điều sau:

  • Tính duy nhất của giá trị
  • Các giá trị liên tiếp trong một giao dịch
  • Các giá trị liên tiếp sau khi máy chủ khởi động lại hoặc các lỗi khác
  • Sử dụng lại các giá trị (ví dụ:khi INSERT hoạt động không thành công)

Để biết thêm thông tin về những hạn chế này, hãy xem tài liệu của Microsoft.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thứ tự của các cột trong chỉ mục quan trọng như thế nào?

  2. Làm thế nào để chèn các ký tự Ả Rập vào cơ sở dữ liệu SQL?

  3. Tôi có thể kết nối với SQL Server bằng Xác thực Windows từ ứng dụng web Java EE không?

  4. Sự khác biệt giữa đọc được cam kết và đọc có thể lặp lại

  5. Xóa một bản ghi khỏi Entity Framework?