Làm thế nào tôi có thể thiết lập lại các AUTO_INCREMENT
của một trường?
Tôi muốn nó bắt đầu đếm 1
lại từ đầu .
TRUNCATE TABLE yourTableName;
Làm thế nào tôi có thể thiết lập lại các AUTO_INCREMENT
của một trường?
Tôi muốn nó bắt đầu đếm 1
lại từ đầu .
TRUNCATE TABLE yourTableName;
Câu trả lời:
Bạn có thể đặt lại bộ đếm với:
ALTER TABLE tablename AUTO_INCREMENT = 1
Đối với InnoDB, bạn không thể đặt auto_increment
giá trị thấp hơn hoặc bằng với chỉ mục hiện tại cao nhất. (trích dẫn từ ViralPatel ):
Lưu ý rằng bạn không thể đặt lại bộ đếm về giá trị nhỏ hơn hoặc bằng bất kỳ giá trị nào đã được sử dụng. Đối với MyISAM, nếu giá trị nhỏ hơn hoặc bằng giá trị tối đa hiện tại trong cột AUTO_INCREMENT, giá trị được đặt lại về mức tối đa hiện tại cộng với một. Đối với InnoDB, nếu giá trị nhỏ hơn giá trị tối đa hiện tại trong cột, không xảy ra lỗi và giá trị chuỗi hiện tại không thay đổi.
Xem Làm thế nào để thiết lập lại AutoIncrement bằng giá trị MAX từ một bảng khác? về cách năng động để có được một giá trị chấp nhận được.
circular reference
curcular reference
gì?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Tôi nghĩ rằng điều này sẽ làm điều đó
UPDATE
sẽ cập nhật tất cả các giá trị trong id
cột.
Đơn giản như thế này:
ALTER TABLE tablename AUTO_INCREMENT = value;
tham khảo: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
nghĩa là đặt giá trị đó thành giá trị mặc định ... để bạn có thể thay thế "giá trị" bằng 1
Có một cách rất dễ dàng với phpmyadmin trong tab "thao tác", bạn có thể đặt, trong các tùy chọn bảng, tự động gửi đến số bạn muốn.
Giải pháp tốt nhất phù hợp với tôi:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
Nó nhanh, hoạt động với innoDB và tôi không cần biết giá trị tối đa hiện tại! Bằng cách này, bộ đếm tăng tự động sẽ đặt lại và nó sẽ tự động bắt đầu từ giá trị tối đa tồn tại.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, trong khi ALTER TABLE tablename AUTO_INCREMENT = 1
thực hiện không .
Tất cả các câu trả lời được xếp hạng cao nhất cho câu hỏi này đều đề xuất "ALTER yourtable AUTO_INCREMENT = value". Tuy nhiên, điều này chỉ hoạt động khi value
trong thay đổi lớn hơn giá trị tối đa hiện tại của cột tự động. Theo tài liệu MySQL 8 :
Bạn không thể đặt lại bộ đếm thành giá trị nhỏ hơn hoặc bằng giá trị hiện đang sử dụng. Đối với cả InnoDB và MyISAM, nếu giá trị nhỏ hơn hoặc bằng giá trị tối đa hiện tại trong cột AUTO_INCREMENT, giá trị được đặt lại thành giá trị cột AUTO_INCREMENT tối đa hiện tại cộng với một.
Về bản chất, bạn chỉ có thể thay đổi AUTO_INCREMENT để tăng giá trị của cột tự động, không được đặt lại thành 1, như OP hỏi trong phần thứ hai của câu hỏi. Đối với các tùy chọn thực sự cho phép bạn đặt AUTO_INCREMENT xuống dưới mức tối đa hiện tại của nó, hãy xem Sắp xếp lại / đặt lại khóa chính tăng tự động .
Thêm một bản cập nhật vì chức năng đã thay đổi trong MySQL 5.6. Kể từ MySQL 5.6, bạn CÓ THỂ sử dụng ALTER TABLE đơn giản với InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;
Các tài liệu được cập nhật để phản ánh điều này:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
Thử nghiệm của tôi cũng cho thấy bảng KHÔNG được sao chép, giá trị được thay đổi đơn giản.
Có các tùy chọn tốt được đưa ra trong Cách đặt lại cột Autoincrement của MySQL
Lưu ý rằng ALTER TABLE tablename AUTO_INCREMENT = value;
không không làm việc cho InnoDB
DELETE
(hoặc ROLLBACK
) sẽ không phục hồi id. Một ngoại lệ: Sau khi khởi động lại (hoặc sự cố), id tiếp theo được tính là MAX(id)+1
, do đó phục hồi hiệu quả các id đã bị xóa ở cuối . Ngoại lệ: MySQL 8.0 khiến những id đó không được sử dụng.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
Tôi đã sử dụng điều này trong một số tập lệnh của mình, trường id được thả xuống và sau đó được thêm lại với các cài đặt trước đó, tất cả các trường tồn tại trong bảng cơ sở dữ liệu được điền vào các giá trị gia tăng tự động mới, điều này cũng sẽ hoạt động với InnoDB.
Lưu ý rằng tất cả các trường trong bảng sẽ được kể lại và sẽ có các id khác !!!.
Bạn cũng có thể sử dụng TRUNCATE
bảng cú pháp như thế này:
TRUNCATE TABLE table_name
HÃY THỬ !! TRUNCATE TABLE your_table
sẽ xóa mọi thứ trong your_table
!!
TRUNCATE
cũng sẽ xóa TẤT CẢ các hàng của bạn trong bảng được chỉ định!
TRUNCATE
cũng sẽ thiết lập lại các auto_increment
lĩnh vực? Trường hợp sử dụng của tôi là xóa dữ liệu cũ trong bảng và khởi động lại ID từ 1 cho dữ liệu mới (hãy tưởng tượng, xóa bảng để sử dụng đúng sau khi hoàn tất kiểm tra). Tôi nghĩ rằng tôi phải đến DROP
toàn bộ bàn và CREATE
nó một lần nữa.
auto_increment
giá trị hiện tại , sử dụng DELETE FROM
thay vì TRUNCATE
.
nó dành cho bàn trống:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
nếu bạn có dữ liệu nhưng bạn muốn thu dọn dữ liệu, tôi khuyên bạn nên sử dụng dữ liệu này:
ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);
Đây là giải pháp của tôi, nhưng tôi sẽ không khuyên bạn làm điều này nếu cột của bạn có các ràng buộc hoặc được kết nối dưới dạng khóa ngoại với các bảng khác vì nó sẽ có tác động xấu hoặc thậm chí sẽ không hoạt động.
ALTER TABLE tbl_name DROP COLUMN column_id
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
Điều này hoạt động tốt!
Kể từ MySQL 5.6, cách tiếp cận dưới đây hoạt động nhanh hơn do DDL trực tuyến (lưu ý algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Bạn có thể chỉ cần cắt bớt bảng để thiết lập lại chuỗi
TRUNCATE TABLE TABLE_NAME
Tôi đã cố gắng thay đổi bảng và đặt auto_increment thành 1 nhưng nó không hoạt động. Tôi quyết tâm xóa tên cột tôi đang tăng, sau đó tạo một cột mới với tên ưa thích của bạn và đặt cột mới đó để tăng từ khi bắt đầu.
Bộ đếm tăng tự động cho một bảng có thể được đặt lại theo hai cách:
Bằng cách thực hiện một truy vấn, giống như những người khác đã giải thích:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Sử dụng Workbench hoặc công cụ thiết kế cơ sở dữ liệu trực quan khác. Tôi sẽ trình bày trong Workbench cách nó được thực hiện - nhưng nó cũng không khác nhiều trong công cụ khác. Bằng cách nhấp chuột phải vào bảng mong muốn và chọn Alter table
từ menu ngữ cảnh. Ở phía dưới, bạn có thể thấy tất cả các tùy chọn có sẵn để thay đổi bảng. Chọn Options
và bạn sẽ nhận được mẫu này:
Sau đó, chỉ cần đặt giá trị mong muốn trong trường Auto increment
như được hiển thị trong hình ảnh. Điều này về cơ bản sẽ thực hiện truy vấn được hiển thị trong tùy chọn đầu tiên.
Để cập nhật mới nhất cộng với một id
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
THAY ĐỔI tablename AUTO_INCREMENT = 1
Tôi googled và tìm thấy câu hỏi này, nhưng câu trả lời tôi thực sự đang tìm kiếm đáp ứng hai tiêu chí:
Vì tôi không thể tìm thấy chính xác những gì tôi muốn ở đây, tôi đã thu thập câu trả lời từ nhiều câu trả lời khác nhau và chia sẻ nó ở đây.
Vài điều cần lưu ý:
id
với kiểu nhưint
khóa chínhtạo một thủ tục được lưu trữ như thế này:
DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN
SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
PREPARE stmt FROM @get_next_inc;
EXECUTE stmt;
SELECT @next_inc AS result;
DEALLOCATE PREPARE stmt;
set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
Sau đó chạy nó.
Trước khi chạy, nó trông như thế này khi bạn xem phần Thủ tục lưu trữ trong cơ sở dữ liệu của bạn.
Khi tôi chạy, tôi chỉ cần chọn thủ tục được lưu trữ và nhấn Run Selection
Lưu ý: phần phân cách là rất quan trọng. Do đó nếu bạn sao chép và dán từ các câu trả lời được chọn hàng đầu trong câu hỏi này, chúng có xu hướng không hoạt động vì lý do này.
Sau khi tôi chạy, tôi sẽ thấy các thủ tục được lưu trữ
Nếu bạn cần thay đổi thủ tục được lưu trữ, bạn cần xóa thủ tục được lưu trữ, sau đó chọn để chạy lại.
Lần này bạn chỉ có thể sử dụng các truy vấn MySQL bình thường.
call reset_autoincrement('products');
Ban đầu từ các ghi chú truy vấn SQL của riêng tôi trong https://simkimsia.com/l Library / sql-query / # mysql- reset-autoinc và được điều chỉnh cho StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Hãy thử chạy truy vấn này
ALTER TABLE tablename AUTO_INCREMENT = value;
Hoặc Thử truy vấn này để đặt lại tự động tăng
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
Và đặt Tự động tăng sau đó chạy truy vấn này
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Tôi khuyên bạn nên truy cập Trình duyệt truy vấn và thực hiện các thao tác sau:
Auto_increment sẽ đặt lại thành một khi bạn nhập hàng mới vào bảng.
Tôi không biết điều gì sẽ xảy ra nếu bạn cố gắng thêm một hàng trong đó giá trị trường auto_increment đã tồn tại.
Hy vọng điều này giúp đỡ!
Cách tốt nhất là xóa trường bằng AI và thêm lại trường đó bằng AI, hoạt động cho tất cả các bảng