Як я можу скинутиAUTO_INCREMENT
поле?
Я хочу, щоб він почав рахувати 1
знову.
TRUNCATE TABLE yourTableName;
Як я можу скинутиAUTO_INCREMENT
поле?
Я хочу, щоб він почав рахувати 1
знову.
TRUNCATE TABLE yourTableName;
Відповіді:
Ви можете скинути лічильник за допомогою:
ALTER TABLE tablename AUTO_INCREMENT = 1
Для InnoDB ви не можете встановити auto_increment
значення, яке є нижчим або рівним найвищому поточному індексу. (цитата від ViralPatel ):
Зауважте, що ви не можете скинути лічильник на значення, менше або рівне тому, яке вже було використано. Для MyISAM, якщо значення менше або дорівнює максимальному значенню, що знаходиться в стовпці AUTO_INCREMENT, це значення скидається на поточний максимум плюс один. Для InnoDB, якщо значення менше поточного максимального значення в стовпці, помилка не виникає і поточне значення послідовності не змінюється.
Див. Як скинути MySQL AutoIncrement за допомогою значення MAX з іншої таблиці? про те, як динамічно отримати прийнятне значення.
circular reference
curcular reference
?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Я думаю, що це вдасться зробити
UPDATE
оновите всі значення в id
стовпці.
Просто так:
ALTER TABLE tablename AUTO_INCREMENT = value;
довідка: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
означає встановити його за замовчуванням ... так що ви можете замінити "значення" на 1
На вкладці «операції» з phpmyadmin є дуже простий спосіб, ви можете встановити в таблиці параметри автоматичне збільшення потрібного номера.
Найкраще рішення, яке працювало для мене:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
Її швидкість, працює з innoDB, і мені не потрібно знати поточне максимальне значення! Таким чином, лічильник автоматичного збільшення збільшиться, і він автоматично запуститься з максимального значення.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, в той час як ALTER TABLE tablename AUTO_INCREMENT = 1
робить НЕ .
Відповіді на це запитання з найбільш високою оцінкою всі рекомендують "ALTER yourtable AUTO_INCREMENT = value". Однак це працює лише тоді, коли value
в alter більше поточного максимального значення стовпця з автоматичним збільшенням. Відповідно до документації на MySQL 8 :
Ви не можете скинути лічильник на значення, менше або рівне значенню, яке зараз використовується. І для InnoDB, і для MyISAM, якщо значення менше або дорівнює максимальному значенню, що знаходиться в стовпці AUTO_INCREMENT, це значення скидається на поточне максимальне значення стовпця AUTO_INCREMENT плюс одиницю.
По суті, ви можете лише змінити AUTO_INCREMENT, щоб збільшити значення стовпця з автоматичним збільшенням, а не скинути його на 1, як задає ОП у другій частині запитання. Для параметрів, які фактично дозволяють встановити AUTO_INCREMENT вниз від його поточного максимуму, подивіться первинний ключ автоматичного збільшення / скидання автоматичного збільшення .
Додавання оновлення через те, що функціональність змінилася в MySQL 5.6. Станом на MySQL 5.6 ви можете використовувати просту таблицю ALTER з InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;
Документи оновлюються, щоб відобразити це:
http://dev.mysql.com/doc/refman/5.6/uk/alter-table.html
Моє тестування також показує, що таблиця НЕ копіюється, значення просто змінюється.
У розділі Як скинути стовпчик автоматичного підвищення MySQL є хороші варіанти
Зауважте, що ALTER TABLE tablename AUTO_INCREMENT = value;
це не працює для InnoDB
DELETE
(або ROLLBACK
) не відновить ідентифікатори. Один виняток: після перезавантаження (або збоїв) обчислюється наступний ідентифікатор MAX(id)+1
, тим самим ефективно відновлюючи видалені ідентифікатори в кінці . Виняток до виключення: MySQL 8.0 залишає ці ідентифікатори невикористаними.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
Я використовував це в деяких моїх сценаріях, поле id скасовується і потім додається з попередніми налаштуваннями, всі існуючі поля в таблиці бази даних заповнюються новими значеннями автоматичного збільшення, це також має працювати з InnoDB.
Зауважте, що всі поля в таблиці будуть перераховані та матимуть інші ідентифікатори !!!.
Ви також можете використовувати TRUNCATE
таблицю синтаксису так:
TRUNCATE TABLE table_name
ПОВЕРНУТИСЯ !! TRUNCATE TABLE your_table
буде видаляти всі у вашому your_table
!!
TRUNCATE
також видалять ВСІ ваші рядки у вказаній таблиці!
TRUNCATE
буде також скинути auto_increment
поля? Мій випадок використання - очистити старі дані в таблиці та знову запустити ідентифікатори з 1 для нових даних (уявіть, таблиця очищення для належного використання після тестування завершена). Я думав, що мені доведеться до DROP
цілого столу і CREATE
знову.
auto_increment
значення, використовуйте DELETE FROM
замість TRUNCATE
.
це для порожнього столу:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
якщо у вас є дані, але ви хочете привести їх в порядок, рекомендую скористатися цим:
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`);
Ось моє рішення, але я не раджу це робити, якщо ваш стовпець має обмеження або підключений як зовнішній ключ до інших таблиць, оскільки це може мати погані наслідки або навіть не працюватиме.
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
Це добре працює!
Станом на MySQL 5.6, підхід нижче працює швидше завдяки онлайн-DDL (примітка algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Можна просто обрізати таблицю, щоб скинути послідовність
TRUNCATE TABLE TABLE_NAME
Я спробував змінити таблицю і встановити auto_increment на 1, але це не вийшло. Я вирішив видалити ім’я стовпця, який я збільшував, а потім створив новий стовпець з улюбленим іменем і встановив цей новий стовпчик для збільшення з початку.
Лічильник автоматичного збільшення для таблиці можна (пере) встановити двома способами:
Виконуючи запит, як і інші, вже пояснено:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Використання Workbench або іншого візуального інструменту проектування баз даних. Я покажу в Workbench, як це робиться - але він не повинен сильно відрізнятися в інших інструментах. Клацніть правою кнопкою миші по потрібній таблиці та виберіть Alter table
із контекстного меню. Унизу ви можете побачити всі доступні варіанти зміни таблиці. Виберіть, Options
і ви отримаєте цю форму:
Потім просто встановіть потрібне значення в полі, Auto increment
як показано на зображенні. Це в основному виконає запит, показаний у першому варіанті.
Щоб оновити останні плюс один ідентифікатор
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
ALTER TABLE ім'я таблиці AUTO_INCREMENT = 1
Я погуглив і знайшов це питання, але відповідь, яку я справді шукаю, відповідає двом критеріям:
Оскільки я не зміг знайти саме те, що хочу тут, я сформулював відповіді з різних відповідей і поділився ними тут.
Кілька речей, що слід зазначити:
id
з типом якint
як основний ключстворити збережену процедуру на зразок цієї:
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 ;
Потім запустіть його.
Перед запуском це виглядає приблизно так, коли ви дивитесь у розділі Збережені процедури у вашій базі даних.
Коли я запускаю, я просто вибираю збережену процедуру і натискаю Запуск вибору
Примітка: Розмежувальна частина має вирішальне значення. Отже, якщо ви скопіюєте та вставте відповіді, обрані зверху в цьому питанні, вони, як правило, не працюють з цієї причини.
Після запуску я повинен побачити збережену процедуру
Якщо вам потрібно змінити збережену процедуру, потрібно видалити збережену процедуру, а потім вибрати для запуску ще раз.
Цього разу ви можете просто використовувати звичайні запити MySQL.
call reset_autoincrement('products');
Спочатку з моїх власних приміток запитів SQL в https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc та адаптований для StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Спробуйте запустити цей запит
ALTER TABLE tablename AUTO_INCREMENT = value;
Або спробуйте цей запит для відновлення автоматичного збільшення
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
І встановіть автоматичне збільшення, а потім запустіть цей запит
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Я пропоную вам перейти до браузера запитів і зробити наступне:
Auto_increment має бути скинутий до одного, коли ви введете новий рядок у таблицю.
Я не знаю, що станеться, якщо ви спробуєте додати рядок, де значення поля авто-посилення вже існує.
Сподіваюся, що це допоможе!