Cách đặt giá trị tăng tự động trong mysql sau khi tạo bảng

Tự động tăng là một tính năng hữu ích được cung cấp bởi MySQL. Nó luôn tạo ra một danh tính duy nhất cho mỗi hàng mới được chèn vào bảng. Nói chung, chúng tôi sử dụng thuộc tính tăng tự động cho trường khóa chính trong bảng. Mỗi lần chúng ta chèn các bản ghi mới vào một bảng, MySQL sẽ tự động tăng giá trị vào cột tăng tự động

Ví dụ: chúng tôi có một bảng đã chứa mười hàng. Tiếp theo, nếu chúng ta thêm một hàng mới mà không đưa giá trị vào cột tăng tự động, MySQL sẽ tự động thêm một hàng mới với id=11

Đôi khi, chúng ta cần xóa các hàng này và đặt lại cột tăng tự động để khi chúng ta thực hiện lần chèn tiếp theo vào bảng, danh tính của bản ghi đầu tiên sẽ có giá trị khóa chính là 1

MySQL cho phép nhiều cách khác nhau để đặt lại giá trị cột tăng tự động. Những cách này là

  1. Sử dụng câu lệnh ALTER TABLE
  2. Sử dụng câu lệnh TRUNCATE TABLE
  3. Sử dụng một cặp câu lệnh DROP TABLE và CREATE TABLE

Đầu tiên, chúng ta sẽ tạo một bảng có tên là "Động vật" và gán cột id với thuộc tính tự động tăng. Xem tuyên bố dưới đây

Tiếp theo, chúng ta sẽ chèn một số dữ liệu mẫu vào bảng "Động vật" như sau

Bây giờ, chúng tôi sẽ thực hiện câu lệnh dưới đây để xác minh thao tác chèn

Chúng ta sẽ nhận được đầu ra dưới đây. Trong câu lệnh chèn, chúng tôi chưa chỉ định bất kỳ giá trị nào cho cột tăng tự động. Nhưng chúng ta có thể quan sát thấy ở đầu ra rằng MySQL tự động tạo một số duy nhất theo thứ tự cho trường này

Cách đặt giá trị tăng tự động trong mysql sau khi tạo bảng

Hãy để chúng tôi lấy bảng này để minh họa các phương pháp đặt lại giá trị cột tăng tự động một cách chi tiết

Sử dụng câu lệnh ALTER TABLE

Câu lệnh ALTER TABLE được sử dụng để thay đổi tên của bảng hoặc bất kỳ trường nào của bảng. Nó cũng được sử dụng để thêm, xóa hoặc đặt lại một cột hiện có trong bảng. MySQL cũng cho phép câu lệnh này đặt lại giá trị cột tăng tự động bất cứ khi nào chúng tôi muốn

cú pháp

Sau đây là cú pháp của câu lệnh ALTER TABLE để đặt lại giá trị cột tự động tăng

Trong cú pháp này, trước tiên chúng tôi đã chỉ định tên của bảng sau mệnh đề ALTER TABLE. Tiếp theo, chúng tôi chỉ định giá trị mà chúng tôi muốn đặt lại trong biểu thức là AUTO_INCREMENT = value

Cần lưu ý rằng MySQL không cho phép đặt lại giá trị nhỏ hơn hoặc bằng giá trị đã được sử dụng. Ví dụ: nếu chúng tôi đang sử dụng InnoDB, giá trị không được nhỏ hơn hoặc bằng giá trị tối đa hiện tại của cột tăng tự động

Đối với MyISAM, nếu giá trị được chỉ định nhỏ hơn hoặc bằng giá trị tối đa của cột auto_increment, thì giá trị đó sẽ được đặt lại về giá trị tối đa hiện tại cộng với một

Đối với InnoDB, nếu giá trị được chỉ định nhỏ hơn giá trị tối đa hiện tại của cột auto_increment, MySQL sẽ không phát sinh bất kỳ lỗi nào và trình tự hiện tại cũng không thay đổi

Hãy xóa hàng thấp nhất trong bảng với id = 6 như bên dưới

Nếu chúng ta thêm một bản ghi mới, MySQL sẽ gán bản ghi này với id = 7. Nhưng nếu chúng ta muốn đặt lại cột này về giá trị cuối cùng, chúng ta có thể sử dụng câu lệnh ALTER TABLE như sau

Nếu chúng ta chèn các bản ghi mới vào bảng này, MySQL sẽ bắt đầu tạo id hàng với 6. Thực hiện truy vấn dưới đây

Cuối cùng, truy vấn dữ liệu trong bảng để xem hiệu quả. Đầu ra bên dưới giải thích rõ ràng hơn khi chúng ta có sáu hàng với giá trị gia tăng tự động cuối cùng là 6 thay vì 7

Cách đặt giá trị tăng tự động trong mysql sau khi tạo bảng

Sử dụng câu lệnh TRUNCATE TABLE

Câu lệnh TRUNCATE TABLE trong MySQL xóa hoàn toàn dữ liệu của bảng mà không xóa cấu trúc của bảng và luôn đặt lại giá trị cột tăng tự động về 0

cú pháp

Cú pháp sau minh họa câu lệnh TRUNCATE TABLE để đặt lại giá trị cột tự động tăng

Cần lưu ý rằng chúng ta không thể khôi phục dữ liệu đã xóa khỏi bảng sau khi thực hiện câu lệnh TRUNCATE TABLE

Sử dụng câu lệnh DROP TABLE và CREATE TABLE

Chúng ta cũng có thể đặt lại giá trị cột tăng tự động bằng cách sử dụng một cặp câu lệnh DROP TABLE và CREATE TABLE. Phương pháp này xóa vĩnh viễn các bản ghi hoàn chỉnh khỏi bảng

Tương tự như truy vấn TRUNCATE TABLE, cặp câu lệnh DROP TABLE và CREATE TABLE trước tiên xóa bảng rồi tạo lại bảng. Do đó, MySQL đặt lại giá trị cột tăng tự động thành 0

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 cung cấp cơ chế khóa có thể định cấu hình có thể cải thiện đáng kể khả năng mở rộng và hiệu suất của các câu lệnh SQL bổ sung hàng vào bảng có cột
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2. Để sử dụng cơ chế
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2 với bảng
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1, cột
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2 phải được xác định là cột đầu tiên hoặc cột duy nhất của một số chỉ mục sao cho có thể thực hiện tương đương với tra cứu
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
6) được lập chỉ mục trên bảng để có được giá trị cột lớn nhất. Chỉ mục không bắt buộc phải là
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
7 hoặc
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
8, nhưng để tránh các giá trị trùng lặp trong cột
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2, nên sử dụng các loại chỉ mục đó

Phần này mô tả các chế độ khóa

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2, ý nghĩa sử dụng của các cài đặt chế độ khóa
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2 khác nhau và cách
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 khởi tạo bộ đếm
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2

Chế độ khóa AUTO_INCREMENT của InnoDB

Phần này mô tả các chế độ khóa

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2 được sử dụng để tạo các giá trị tăng tự động và mỗi chế độ khóa ảnh hưởng đến sao chép như thế nào. Chế độ khóa tăng tự động được định cấu hình khi khởi động bằng biến
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
45

Các thuật ngữ sau được sử dụng để mô tả cài đặt

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
45

  • Câu nói “

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47-like”

    Tất cả các câu lệnh tạo ra các hàng mới trong một bảng, bao gồm

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47,
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    49,
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    90,
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    91 và
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    92. Bao gồm "chèn đơn giản", "chèn số lượng lớn" và "chèn ở chế độ hỗn hợp"

  • “Chèn đơn giản”

    Các câu lệnh có thể xác định trước số lượng hàng được chèn vào (khi câu lệnh được xử lý ban đầu). Điều này bao gồm các câu lệnh một hàng và nhiều hàng

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 và
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    90 không có truy vấn con lồng nhau, nhưng không phải là
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    95

  • “Chèn số lượng lớn”

    Các câu lệnh không biết trước số lượng hàng sẽ được chèn (và số lượng giá trị tăng tự động bắt buộc). Điều này bao gồm các câu lệnh

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    49,
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    91 và
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    92, nhưng không phải là
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 đơn giản.
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    1 chỉ định từng giá trị mới cho cột
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 khi mỗi hàng được xử lý

  • “Phụ trang chế độ hỗn hợp”

    Đây là các câu lệnh "chèn đơn giản" chỉ định giá trị tăng tự động cho một số (chứ không phải tất cả) các hàng mới. Một ví dụ sau, trong đó

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    12 là một cột
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 của bảng
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    14

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    4

    Một loại “chèn chế độ hỗn hợp” khác là

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    95, trong trường hợp xấu nhất có hiệu lực là một
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 theo sau là một
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    17, trong đó giá trị được phân bổ cho cột
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 có thể được sử dụng hoặc không trong giai đoạn cập nhật

Có ba cài đặt khả thi cho biến

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
45. Các cài đặt lần lượt là 0, 1 hoặc 2 cho chế độ khóa “truyền thống”, “liên tiếp” hoặc “xen kẽ”. Kể từ MySQL 8. 0, chế độ khóa xen kẽ (
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
00) là cài đặt mặc định. Trước MySQL 8. 0, chế độ khóa liên tục là mặc định (
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
01)

Cài đặt mặc định của chế độ khóa xen kẽ trong MySQL 8. 0 phản ánh sự thay đổi từ sao chép dựa trên câu lệnh sang sao chép dựa trên hàng làm loại sao chép mặc định. Sao chép dựa trên câu lệnh yêu cầu chế độ khóa tăng tự động liên tiếp để đảm bảo rằng các giá trị tăng tự động được gán theo thứ tự có thể dự đoán và lặp lại cho một chuỗi câu lệnh SQL nhất định, trong khi sao chép dựa trên hàng không nhạy cảm với thứ tự thực thi của câu lệnh SQL

  • CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    02 (chế độ khóa (“truyền thống”)

    Chế độ khóa truyền thống cung cấp hành vi giống như đã tồn tại trước khi biến

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 được giới thiệu. Tùy chọn chế độ khóa truyền thống được cung cấp để tương thích ngược, kiểm tra hiệu suất và khắc phục sự cố với "chèn chế độ hỗn hợp", do có thể có sự khác biệt về ngữ nghĩa

    Trong chế độ khóa này, tất cả các câu lệnh “giống như CHÈN” đều có khóa

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 cấp bảng đặc biệt để chèn vào các bảng có cột
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2. Khóa này thường được giữ ở cuối câu lệnh (không phải ở cuối giao dịch) để đảm bảo rằng các giá trị tăng tự động được gán theo thứ tự có thể dự đoán và lặp lại cho một chuỗi các câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 nhất định và để đảm bảo rằng giá trị tăng tự động

    Trong trường hợp sao chép dựa trên câu lệnh, điều này có nghĩa là khi một câu lệnh SQL được sao chép trên máy chủ sao chép, các giá trị tương tự được sử dụng cho cột tăng tự động như trên máy chủ nguồn. Kết quả của việc thực hiện nhiều câu lệnh

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 là xác định và bản sao tái tạo dữ liệu giống như trên nguồn. Nếu các giá trị gia tăng tự động được tạo bởi nhiều câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 được xen kẽ, thì kết quả của hai câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 đồng thời sẽ không mang tính quyết định và không thể truyền đến máy chủ bản sao một cách đáng tin cậy bằng cách sử dụng bản sao dựa trên câu lệnh

    Để làm rõ điều này, hãy xem xét một ví dụ sử dụng bảng này

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    

    Giả sử rằng có hai giao dịch đang chạy, mỗi giao dịch chèn các hàng vào một bảng có cột

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2. Một giao dịch đang sử dụng câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    49 chèn 1000 hàng và một giao dịch khác đang sử dụng câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 đơn giản chèn một hàng

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    4

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    1 không thể biết trước có bao nhiêu hàng được truy xuất từ ​​
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 trong câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 trong Tx1 và nó chỉ định từng giá trị tăng tự động khi câu lệnh tiếp tục. Với khóa cấp bảng, được giữ ở cuối câu lệnh, chỉ một câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 đề cập đến bảng
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    14 có thể thực thi tại một thời điểm và việc tạo các số tăng tự động bằng các câu lệnh khác nhau không được xen kẽ. Các giá trị tăng tự động được tạo bởi câu lệnh Tx1
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    49 là liên tiếp và giá trị tăng tự động (đơn) được sử dụng bởi câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 trong Tx2 nhỏ hơn hoặc lớn hơn tất cả các giá trị được sử dụng cho Tx1, tùy thuộc vào câu lệnh nào thực hiện trước

    Miễn là các câu lệnh SQL thực thi theo cùng một thứ tự khi được phát lại từ nhật ký nhị phân (khi sử dụng sao chép dựa trên câu lệnh hoặc trong các tình huống khôi phục), kết quả sẽ giống như khi Tx1 và Tx2 chạy lần đầu. Do đó, các khóa cấp độ bảng được giữ cho đến khi kết thúc câu lệnh tạo ra các câu lệnh

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 sử dụng tự động tăng an toàn để sử dụng với sao chép dựa trên câu lệnh. Tuy nhiên, các khóa cấp bảng đó hạn chế tính đồng thời và khả năng mở rộng khi nhiều giao dịch đang thực thi các câu lệnh chèn cùng một lúc

    Trong ví dụ trước, nếu không có khóa mức bảng, giá trị của cột tăng tự động được sử dụng cho

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 trong Tx2 phụ thuộc vào thời điểm thực thi chính xác của câu lệnh. Nếu
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 của Tx2 thực thi trong khi
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 của Tx1 đang chạy (chứ không phải trước khi nó bắt đầu hoặc sau khi nó hoàn thành), thì các giá trị gia tăng tự động cụ thể được chỉ định bởi hai câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 là không xác định và có thể khác nhau giữa các lần chạy

    Trong chế độ khóa liên tiếp,

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    1 có thể tránh sử dụng khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 ở cấp độ bảng cho các câu lệnh "chèn đơn giản" trong đó số lượng hàng được biết trước và vẫn đảm bảo thực thi xác định và an toàn cho bản sao dựa trên câu lệnh

    Nếu bạn không sử dụng nhật ký nhị phân để phát lại các câu lệnh SQL như một phần của quá trình khôi phục hoặc sao chép, chế độ khóa xen kẽ có thể được sử dụng để loại bỏ tất cả việc sử dụng khóa

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 cấp bảng để có hiệu suất và đồng thời lớn hơn, với chi phí cho phép các lỗ hổng trong

  • CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    08 (chế độ khóa (“liên tiếp”)

    Trong chế độ này, "chèn số lượng lớn" sử dụng khóa cấp bảng

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 đặc biệt và giữ nó cho đến khi kết thúc câu lệnh. Điều này áp dụng cho tất cả các câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    49,
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    91 và
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    92. Mỗi lần chỉ có một câu lệnh giữ khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 có thể thực thi. Nếu bảng nguồn của thao tác chèn hàng loạt khác với bảng đích, khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 trên bảng đích sẽ được thực hiện sau khi khóa chia sẻ được thực hiện trên hàng đầu tiên được chọn từ bảng nguồn. Nếu nguồn và đích của thao tác chèn hàng loạt là cùng một bảng, thì khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 được thực hiện sau khi thực hiện khóa chia sẻ trên tất cả các hàng đã chọn

    “Chèn đơn giản” (đã biết trước số lượng hàng được chèn) tránh khóa

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 ở cấp độ bảng bằng cách lấy số lượng giá trị tăng tự động cần thiết dưới sự kiểm soát của một mutex (khóa trọng lượng nhẹ) đó là . Không có khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 cấp bảng nào được sử dụng trừ khi khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 được giữ bởi một giao dịch khác. Nếu một giao dịch khác giữ khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04, thì một "chèn đơn giản" sẽ đợi khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04, như thể đó là một "chèn số lượng lớn"

    Chế độ khóa này đảm bảo rằng, khi có các câu lệnh

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 trong đó số lượng hàng không được biết trước (và khi các số tăng tự động được chỉ định khi câu lệnh tiến triển), tất cả các giá trị tăng tự động được chỉ định bởi bất kỳ "tương tự
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47" nào

    Nói một cách đơn giản, chế độ khóa này cải thiện đáng kể khả năng mở rộng trong khi vẫn an toàn khi sử dụng với sao chép dựa trên câu lệnh. Hơn nữa, như với chế độ khóa “truyền thống”, các số gia tăng tự động được chỉ định bởi bất kỳ câu lệnh đã cho nào là liên tiếp. Không có thay đổi về ngữ nghĩa so với chế độ “truyền thống” đối với bất kỳ câu lệnh nào sử dụng tăng tự động, với một ngoại lệ quan trọng

    Ngoại lệ dành cho "chèn ở chế độ hỗn hợp", trong đó người dùng cung cấp các giá trị rõ ràng cho cột

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 cho một số, nhưng không phải tất cả, các hàng trong "chèn đơn giản" nhiều hàng. Đối với các lần chèn như vậy,
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    1 phân bổ nhiều giá trị gia tăng tự động hơn số lượng hàng sẽ được chèn. Tuy nhiên, tất cả các giá trị được gán tự động được tạo liên tiếp (và do đó cao hơn) giá trị tăng tự động được tạo bởi câu lệnh trước đó được thực hiện gần đây nhất. Số “thừa” bị mất

  • CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    75 (chế độ khóa (“xen kẽ”)

    Trong chế độ khóa này, không có câu lệnh “

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47-like” nào sử dụng khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 cấp bảng và nhiều câu lệnh có thể thực thi cùng một lúc. Đây là chế độ khóa nhanh nhất và có thể mở rộng nhất, nhưng không an toàn khi sử dụng các kịch bản khôi phục hoặc sao chép dựa trên câu lệnh khi các câu lệnh SQL được phát lại từ nhật ký nhị phân

    Trong chế độ khóa này, các giá trị tăng tự động được đảm bảo là duy nhất và tăng đơn điệu trên tất cả các câu lệnh “

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47-like” được thực thi đồng thời. Tuy nhiên, vì nhiều câu lệnh có thể tạo số cùng một lúc (nghĩa là phân bổ số được xen kẽ giữa các câu lệnh), các giá trị được tạo cho các hàng được chèn bởi bất kỳ câu lệnh đã cho nào có thể không liên tiếp

    Nếu các câu lệnh duy nhất đang thực thi là “các phần chèn đơn giản” trong đó số lượng hàng được chèn được biết trước, thì không có khoảng trống nào trong các số được tạo cho một câu lệnh, ngoại trừ “các phần chèn ở chế độ hỗn hợp”. Tuy nhiên, khi "chèn số lượng lớn" được thực thi, có thể có khoảng trống trong các giá trị tăng tự động được chỉ định bởi bất kỳ câu lệnh đã cho nào

Hàm ý sử dụng chế độ khóa AUTO_INCREMENT của InnoDB

  • Sử dụng tăng tự động với sao chép

    Nếu bạn đang sử dụng bản sao dựa trên câu lệnh, hãy đặt

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 thành 0 hoặc 1 và sử dụng cùng một giá trị trên nguồn và bản sao của nó. Các giá trị tăng tự động không được đảm bảo giống nhau trên các bản sao cũng như trên nguồn nếu bạn sử dụng
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 = 2 (“xen kẽ”) hoặc các cấu hình trong đó nguồn và các bản sao không sử dụng cùng một chế độ khóa

    Nếu bạn đang sử dụng sao chép theo hàng hoặc theo định dạng hỗn hợp, thì tất cả các chế độ khóa tự động gia tăng đều an toàn, vì sao chép theo hàng không nhạy cảm với thứ tự thực thi câu lệnh SQL (và định dạng hỗn hợp sử dụng theo hàng

  • Các giá trị gia tăng tự động “Mất” và các khoảng trống trình tự

    Trong tất cả các chế độ khóa (0, 1 và 2), nếu một giao dịch tạo ra các giá trị tăng tự động quay trở lại, các giá trị tăng tự động đó sẽ bị "mất". Khi một giá trị được tạo cho một cột tăng tự động, nó không thể được khôi phục, cho dù câu lệnh “

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47-like” có được hoàn thành hay không và liệu giao dịch có chứa có được khôi phục hay không. Những giá trị bị mất như vậy không được sử dụng lại. Do đó, có thể có khoảng trống trong các giá trị được lưu trữ trong cột
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 của bảng

  • Chỉ định NULL hoặc 0 cho cột

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2

    Trong tất cả các chế độ khóa (0, 1 và 2), nếu người dùng chỉ định NULL hoặc 0 cho cột

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 trong
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47, thì
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    1 sẽ xử lý hàng như thể giá trị không được chỉ định và tạo một giá trị mới cho hàng đó

  • Gán giá trị âm cho cột

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2

    Trong tất cả các chế độ khóa (0, 1 và 2), hoạt động của cơ chế tự động tăng không được xác định nếu bạn gán giá trị âm cho cột

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2

  • Nếu giá trị

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 trở nên lớn hơn số nguyên tối đa cho loại số nguyên đã chỉ định

    Trong tất cả các chế độ khóa (0, 1 và 2), hành vi của cơ chế tăng tự động không được xác định nếu giá trị trở nên lớn hơn số nguyên tối đa có thể được lưu trữ trong loại số nguyên đã chỉ định

  • Khoảng trống trong các giá trị tăng tự động cho "chèn hàng loạt"

    Với

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 được đặt thành 0 (“truyền thống”) hoặc 1 (“liên tiếp”), các giá trị tăng tự động được tạo bởi bất kỳ câu lệnh đã cho nào là liên tiếp, không có khoảng trống, vì khóa
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    04 ở cấp độ bảng được giữ cho đến khi kết thúc câu lệnh,

    Với

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 được đặt thành 2 (“xen kẽ”), có thể có khoảng trống trong các giá trị tăng tự động được tạo bởi “chèn hàng loạt”, nhưng chỉ khi có các câu lệnh “giống như
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47” được thực thi đồng thời

    Đối với chế độ khóa 1 hoặc 2, khoảng cách có thể xảy ra giữa các câu lệnh liên tiếp vì đối với thao tác chèn hàng loạt, số lượng giá trị tăng tự động chính xác mà mỗi câu lệnh yêu cầu có thể không được biết và có thể ước tính quá cao

  • Giá trị gia tăng tự động được chỉ định bởi "chèn chế độ hỗn hợp"

    Hãy xem xét một "chèn chế độ hỗn hợp", trong đó một "chèn đơn giản" chỉ định giá trị tăng tự động cho một số (nhưng không phải tất cả) các hàng kết quả. Một tuyên bố như vậy hoạt động khác nhau trong các chế độ khóa 0, 1 và 2. Ví dụ: giả sử

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    12 là cột
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 của bảng
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    14 và số thứ tự được tạo tự động gần đây nhất là 100

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    9

    Bây giờ, hãy xem xét câu lệnh "chèn chế độ hỗn hợp" sau đây

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    1

    Với

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 được đặt thành 0 (“truyền thống”), bốn hàng mới là

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    0

    Giá trị tăng tự động khả dụng tiếp theo là 103 vì các giá trị tăng tự động được phân bổ lần lượt, không phải tất cả cùng một lúc khi bắt đầu thực thi câu lệnh. Kết quả này đúng cho dù có hay không có đồng thời thực hiện các câu lệnh “

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47-like” (thuộc bất kỳ loại nào)

    Với

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 được đặt thành 1 (“liên tiếp”), bốn hàng mới cũng

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    0

    Tuy nhiên, trong trường hợp này, giá trị tăng tự động khả dụng tiếp theo là 105, không phải 103 vì bốn giá trị tăng tự động được phân bổ tại thời điểm câu lệnh được xử lý, nhưng chỉ có hai giá trị được sử dụng. Kết quả này đúng cho dù có hay không có đồng thời thực hiện các câu lệnh “

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47-like” (thuộc bất kỳ loại nào)

    Với

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 được đặt thành 2 (“xen kẽ”), bốn hàng mới là

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    0

    Các giá trị của

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    22 và
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    23 là duy nhất và lớn hơn bất kỳ hàng nào được tạo trước đó. Tuy nhiên, các giá trị cụ thể của
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    22 và
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    23 phụ thuộc vào số lượng giá trị tăng tự động được tạo bởi các câu lệnh thực thi đồng thời

    Cuối cùng, hãy xem xét câu lệnh sau, được đưa ra khi số thứ tự được tạo gần đây nhất là 100

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    23

    Với bất kỳ cài đặt

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    45 nào, câu lệnh này tạo ra lỗi khóa trùng lặp 23000 (
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    27) vì 101 được phân bổ cho hàng
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    28 và việc chèn hàng
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    29 không thành công

  • Sửa đổi giá trị cột

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 ở giữa chuỗi câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47

    Trong MySQL5. 7 trở về trước, việc sửa đổi giá trị cột

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 ở giữa chuỗi câu lệnh
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 có thể dẫn đến lỗi "Mục nhập trùng lặp". Ví dụ: nếu bạn đã thực hiện thao tác
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    17 đã thay đổi giá trị cột
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 thành giá trị lớn hơn giá trị tăng tự động tối đa hiện tại, thì các thao tác
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 tiếp theo không chỉ định giá trị tăng tự động không được sử dụng có thể gặp phải lỗi "Mục nhập trùng lặp". Trong Mysql 8. 0 trở lên, nếu bạn sửa đổi giá trị cột
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    2 thành giá trị lớn hơn giá trị tăng tự động tối đa hiện tại, giá trị mới sẽ được duy trì và các hoạt động
    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    47 tiếp theo sẽ phân bổ giá trị tăng tự động bắt đầu từ giá trị mới, lớn hơn. Hành vi này được thể hiện trong ví dụ sau

    CREATE TABLE t1 (
      c1 INT(11) NOT NULL AUTO_INCREMENT,
      c2 VARCHAR(10) DEFAULT NULL,
      PRIMARY KEY (c1)
    ) ENGINE=InnoDB;
    
    7

InnoDB AUTO_INCREMENT Khởi tạo bộ đếm

Phần này mô tả cách

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 khởi tạo bộ đếm
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2

Nếu bạn chỉ định một cột

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2 cho một bảng
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1, thì đối tượng bảng trong bộ nhớ chứa một bộ đếm đặc biệt được gọi là bộ đếm tăng tự động được sử dụng khi gán giá trị mới cho cột

Trong MySQL5. 7 trở về trước, bộ đếm tăng tự động được lưu trữ trong bộ nhớ chính, không phải trên đĩa. Để khởi tạo bộ đếm tăng tự động sau khi khởi động lại máy chủ,

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 sẽ thực thi tương đương với câu lệnh sau trong lần chèn đầu tiên vào bảng có chứa cột
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
0

Trong Mysql 8. 0, hành vi này được thay đổi. Giá trị bộ đếm tăng tự động tối đa hiện tại được ghi vào nhật ký làm lại mỗi khi nó thay đổi và được lưu vào từ điển dữ liệu trên mỗi điểm kiểm tra. Những thay đổi này làm cho giá trị bộ đếm tăng tự động tối đa hiện tại liên tục trong các lần khởi động lại máy chủ

Khi khởi động lại máy chủ sau khi tắt bình thường,

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 khởi tạo bộ đếm tăng tự động trong bộ nhớ bằng cách sử dụng giá trị tăng tự động tối đa hiện tại được lưu trữ trong từ điển dữ liệu

Khi khởi động lại máy chủ trong quá trình khôi phục sự cố,

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 khởi tạo bộ đếm tăng tự động trong bộ nhớ bằng cách sử dụng giá trị tăng tự động tối đa hiện tại được lưu trữ trong từ điển dữ liệu và quét nhật ký làm lại để tìm các giá trị bộ đếm tăng tự động được ghi từ điểm kiểm tra cuối cùng. Nếu giá trị được ghi lại lớn hơn giá trị bộ đếm trong bộ nhớ, giá trị được ghi lại được áp dụng. Tuy nhiên, trong trường hợp máy chủ thoát không mong muốn, việc sử dụng lại giá trị gia tăng tự động được phân bổ trước đó không thể được đảm bảo. Mỗi lần giá trị tăng tự động tối đa hiện tại bị thay đổi do hoạt động của
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
47 hoặc
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
17, giá trị mới được ghi vào nhật ký làm lại, nhưng nếu thoát không mong muốn xảy ra trước khi nhật ký làm lại được xóa vào đĩa, giá trị được phân bổ trước đó có thể bị thay đổi.

Trường hợp duy nhất trong đó

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 sử dụng tương đương với câu lệnh
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
50 FOR UPDATE để khởi tạo bộ đếm tăng tự động là khi nhập bảng không có tệp siêu dữ liệu
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
51. Mặt khác, giá trị bộ đếm tăng tự động tối đa hiện tại được đọc từ tệp siêu dữ liệu
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
51 nếu có. Ngoài việc khởi tạo giá trị bộ đếm, tương đương với câu lệnh
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
50 được sử dụng để xác định giá trị bộ đếm tăng tự động tối đa hiện tại của bảng khi cố gắng đặt giá trị bộ đếm thành một giá trị nhỏ hơn hoặc bằng giá trị bộ đếm được duy trì bằng cách sử dụng
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
54 . Ví dụ: bạn có thể thử đặt giá trị bộ đếm thành giá trị nhỏ hơn sau khi xóa một số bản ghi. Trong trường hợp này, bảng phải được tìm kiếm để đảm bảo rằng giá trị bộ đếm mới không nhỏ hơn hoặc bằng giá trị bộ đếm tối đa thực tế hiện tại

Trong MySQL5. 7 trở về trước, việc khởi động lại máy chủ sẽ hủy bỏ tác dụng của tùy chọn bảng

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
55, tùy chọn này có thể được sử dụng trong câu lệnh
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
56 hoặc
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
57 để đặt giá trị bộ đếm ban đầu hoặc thay đổi giá trị bộ đếm hiện có, tương ứng. Trong Mysql 8. 0, khởi động lại máy chủ không hủy tác dụng của tùy chọn bảng
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
55. Nếu bạn khởi tạo bộ đếm tăng tự động thành một giá trị cụ thể hoặc nếu bạn thay đổi giá trị bộ đếm tăng tự động thành một giá trị lớn hơn, giá trị mới sẽ được duy trì trong suốt quá trình khởi động lại máy chủ

Trong MySQL5. 7 trở về trước, máy chủ khởi động lại ngay sau thao tác

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
59 có thể dẫn đến việc sử dụng lại các giá trị tăng tự động đã được phân bổ trước đó cho giao dịch hoàn nguyên, hoàn nguyên hiệu quả giá trị tăng tự động tối đa hiện tại. Trong Mysql 8. 0, giá trị tăng tự động tối đa hiện tại được duy trì, ngăn việc sử dụng lại các giá trị được phân bổ trước đó

Nếu một câu lệnh

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
60 kiểm tra một bảng trước khi bộ đếm tăng tự động được khởi tạo, thì
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 sẽ mở bảng và khởi tạo giá trị bộ đếm bằng cách sử dụng giá trị tăng tự động tối đa hiện tại được lưu trữ trong từ điển dữ liệu. Sau đó, giá trị được lưu trữ trong bộ nhớ để sử dụng cho các lần chèn hoặc cập nhật sau này. Việc khởi tạo giá trị bộ đếm sử dụng đọc khóa loại trừ bình thường trên bảng kéo dài đến cuối giao dịch.
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 tuân theo quy trình tương tự khi khởi tạo bộ đếm tăng tự động cho bảng mới tạo có giá trị tăng tự động do người dùng chỉ định lớn hơn 0

Sau khi bộ đếm tăng tự động được khởi tạo, nếu bạn không chỉ định rõ ràng giá trị tăng tự động khi chèn một hàng, thì

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 sẽ ngầm tăng bộ đếm và gán giá trị mới cho cột. Nếu bạn chèn một hàng chỉ định rõ ràng giá trị cột tăng tự động và giá trị này lớn hơn giá trị bộ đếm tối đa hiện tại, thì bộ đếm được đặt thành giá trị đã chỉ định

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 sử dụng bộ đếm tăng tự động trong bộ nhớ miễn là máy chủ chạy. Khi máy chủ bị dừng và khởi động lại,
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
1 sẽ khởi tạo lại bộ đếm tăng tự động, như đã mô tả trước đó

Biến

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
66 xác định điểm bắt đầu cho giá trị cột
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2. Cài đặt mặc định là 1

Biến

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
68 kiểm soát khoảng thời gian giữa các giá trị cột liên tiếp. Cài đặt mặc định là 1

Khi cột số nguyên

CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
2 hết giá trị, thao tác
CREATE TABLE t1 (
  c1 INT(11) NOT NULL AUTO_INCREMENT,
  c2 VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (c1)
) ENGINE=InnoDB;
47 tiếp theo sẽ trả về lỗi khóa trùng lặp. Đây là hành vi chung của MySQL

Chúng tôi có thể chèn giá trị gia tăng tự động trong MySQL không?

Cú pháp cho MySQL . Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT là 1 và giá trị này sẽ tăng thêm 1 cho mỗi bản ghi mới. GIÁ TRỊ ('Lars','Monsen'); . MySQL uses the AUTO_INCREMENT keyword to perform an auto-increment feature. By default, the starting value for AUTO_INCREMENT is 1, and it will increment by 1 for each new record. VALUES ('Lars','Monsen'); The SQL statement above would insert a new record into the "Persons" table.

Làm cách nào tôi có thể nhận được số gia tăng tự động tiếp theo trong MySQL?

MySQL có từ khóa AUTO_INCREMENT để thực hiện tăng tự động. Giá trị bắt đầu cho AUTO_INCREMENT là 1, là giá trị mặc định. Nó sẽ tăng thêm 1 cho mỗi bản ghi mới. Để lấy id tăng tự động tiếp theo trong MySQL, chúng ta có thể sử dụng hàm last_insert_id() từ MySQL hoặc auto_increment với SELECT .

Làm cách nào để kiểm tra giá trị gia tăng tự động trong một bảng?

Để biết giá trị auto_increment hiện tại, chúng ta có thể sử dụng hàm last_insert_id() . Đầu tiên, chúng ta sẽ tạo một bảng với sự trợ giúp của lệnh INSERT. Bây giờ, chúng ta sẽ xem có bao nhiêu bản ghi mà tôi đã chèn vào bảng của mình với sự trợ giúp của lệnh SELECT. Do đó, mức tăng tự động cuối cùng là 4.

Làm cách nào để tạo khóa chính tăng tự động trong bảng hiện có trong SQL Server?

Nếu bạn đang tìm cách thêm số gia tự động vào bảng hiện có bằng cách thay đổi cột int hiện có thành IDENTITY , SQL Server sẽ chống lại bạn. Bạn sẽ phải. Thêm một cột mới cùng với khóa chính mới được tăng tự động của bạn hoặc. Bỏ cột int cũ của bạn và sau đó thêm IDENTITY mới ngay sau đó.