MySQL có tự động tăng bắt đầu từ 0 không?
Tự động tăng cho phép một số duy nhất được tạo tự động khi một bản ghi mới được chèn vào bảng Show 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 Cú pháp cho MySQLCâu lệnh SQL sau đây xác định cột "Personid" là trường khóa chính tăng tự động trong bảng "Persons" TẠO BẢNG Người ( MySQL sử dụng từ khóa SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 để thực hiện tính năng tự động tăng Theo mặc định, giá trị bắt đầu cho SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 là 1 và giá trị này sẽ tăng thêm 1 cho mỗi bản ghi mới Để chuỗi SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 bắt đầu với một giá trị khác, hãy sử dụng câu lệnh SQL sau THAY ĐỔI BẢNG Người AUTO_INCREMENT=100; Để chèn một bản ghi mới vào bảng "Persons", chúng ta 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) CHÈN VÀO Người (Tên,Họ) 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 số tiếp theo từ chuỗi seq_person. Cột "FirstName" sẽ được đặt thành "Lars" và cột "LastName" sẽ được đặt thành "Monsen" Tự động tăng cho phép một số duy nhất được tạo tự động khi một bản ghi 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 Từ khóa AUTO_INCREMENT của MySQLMySQL sử dụng từ khóa SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 để thực hiện tính năng tự động tăng Theo mặc định, giá trị bắt đầu cho SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 là 1 và giá trị này sẽ tăng thêm 1 cho mỗi bản ghi mới Câu lệnh SQL sau đây xác định cột "Personid" là trường khóa chính tăng tự động trong bảng "Persons" TẠO BẢNG Người ( Để chuỗi SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 bắt đầu với một giá trị khác, hãy sử dụng câu lệnh SQL sau THAY ĐỔI BẢNG Người AUTO_INCREMENT=100; Khi chúng tôi chèn một bản ghi mới vào bảng "Người", chúng tôi KHÔNG phải chỉ định giá trị cho cột "Người" (một giá trị duy nhất sẽ được thêm tự động) CHÈN VÀO Người (Tên,Họ) 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ẽ tự động được gán một giá trị duy nhất. Cột "FirstName" sẽ được đặt thành "Lars" và cột "LastName" sẽ được đặt thành "Monsen" Thuộc tính SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 có thể được sử dụng để tạo danh tính duy nhất cho các hàng mới. Khi bạn chèn một bản ghi mới vào bảng (hoặc khi thêm thuộc tính AUTO_INCREMENT bằng câu lệnh ALTER TABLE) và trường auto_increment là NULL hoặc DEFAULT (trong trường hợp là INSERT), giá trị sẽ tự động được tăng lên. Điều này cũng áp dụng cho 0, trừ khi NO_AUTO_VALUE_ON_ZERO SQL_MODE được bật SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 cột bắt đầu từ 1 theo mặc định. Giá trị được tạo tự động không bao giờ được thấp hơn 0 Mỗi bảng chỉ có thể có một cột SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2. Nó phải được định nghĩa là một khóa (không nhất thiết phải là khóa SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+1 hoặc SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2). Trong một số công cụ lưu trữ (bao gồm cả InnoDB mặc định), nếu khóa bao gồm nhiều cột, thì cột SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 phải là cột đầu tiên. Các công cụ lưu trữ cho phép đặt cột ở nơi khác là Aria, MyISAM, MERGE, Spider, TokuDB, BLACKHOLE, FederatedX và Federated CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('fox'),('whale'),('ostrich'); SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+ SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+4 là bí danh của SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+5 CREATE TABLE t (id SERIAL, c CHAR(1)) ENGINE=InnoDB; SHOW CREATE TABLE t \G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `c` char(1) DEFAULT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 Đặt hoặc Thay đổi Giá trị Auto_IncrementBạn có thể sử dụng câu lệnh SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+6 để gán giá trị mới cho tùy chọn bảng SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+7 hoặc đặt biến hệ thống máy chủ insert_id để thay đổi giá trị SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 tiếp theo được phiên hiện tại chèn vào Có thể sử dụng SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+9 để xem giá trị SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 cuối cùng được phiên hiện tại chèn vào SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+0 InnoDBCho đến khi MariaDB 10. 2. 3, InnoDB đã sử dụng bộ đếm tăng tự động được lưu trữ trong bộ nhớ. Khi máy chủ khởi động lại, bộ đếm được khởi tạo lại thành giá trị cao nhất được sử dụng trong bảng, điều này sẽ hủy bỏ tác dụng của bất kỳ tùy chọn AUTO_INCREMENT = N nào trong các câu lệnh của bảng Từ MariaDB 10. 2. 4, hạn chế này đã được dỡ bỏ và AUTO_INCREMENT vẫn tồn tại Xem thêm Xử lý AUTO_INCREMENT trong InnoDB Đặt giá trị rõ ràngCó thể chỉ định giá trị cho cột SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2. Nếu khóa là chính hoặc duy nhất, giá trị phải chưa tồn tại trong khóa Nếu giá trị mới cao hơn giá trị tối đa hiện tại, giá trị SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 được cập nhật, vì vậy giá trị tiếp theo sẽ cao hơn. Nếu giá trị mới thấp hơn giá trị tối đa hiện tại, giá trị SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2 sẽ không thay đổi Ví dụ sau minh họa những hành vi này SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+1 Công cụ lưu trữ ARCHIVE không cho phép chèn giá trị thấp hơn giá trị tối đa hiện tại Giá trị bị mấtCột AUTO_INCREMENT thường thiếu giá trị. Điều này xảy ra bởi vì nếu một hàng bị xóa hoặc giá trị AUTO_INCREMENT được cập nhật rõ ràng, thì các giá trị cũ sẽ không bao giờ được sử dụng lại. Câu lệnh REPLACE cũng xóa một hàng và giá trị của nó bị lãng phí. Với InnoDB, các giá trị có thể được bảo lưu bởi một giao dịch; Do đó, các giá trị AUTO_INCREMENT có thể được sử dụng để sắp xếp kết quả theo thứ tự thời gian, nhưng không phải để tạo chuỗi số Để làm cho master-master hoặc Galera an toàn khi sử dụng SELECT * FROM animals; +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | fox | | 5 | whale | | 6 | ostrich | +----+---------+2, người ta nên sử dụng các biến hệ thống auto_increment_increment và auto_increment_offset để tạo các giá trị duy nhất cho mỗi máy chủ có thể tự độngAUTO_INCREMENT các cột bắt đầu từ 1 theo mặc định. Giá trị được tạo tự động không bao giờ được thấp hơn 0 . Mỗi bảng chỉ có thể có một cột AUTO_INCREMENT. Nó phải được định nghĩa là một khóa (không nhất thiết phải là khóa CHÍNH hoặc khóa DUY NHẤT).
AUTO_INCREMENT bắt đầu như thế nào?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'); . Cột "Personid" sẽ được gán một giá trị duy nhất.
Cách đặt tự độngALTER TABLE yourTableName AUTO_INCREMENT=0; Cú pháp trên sẽ bắt đầu từ 1.
làm thế nào để tự độngTự động tăng cho phép một số duy nhất được tạo tự động khi bản ghi 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. |