Вставить автоматический прирост первичного ключа в существующую таблицу

Я пытаюсь изменить таблицу, в которой нет первичного ключа или столбца auto_increment. Я знаю, как добавить столбец первичного ключа, но мне было интересно, можно ли автоматически вставлять данные в столбец первичного ключа (у меня уже есть 500 строк в БД и хочу дать им идентификатор, но я не хочу делать это вручную) , Есть предположения? Большое спасибо.

Оператор ALTER TABLE добавляющий столбец PRIMARY KEY корректно работает в моем тестировании:

 ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT; 

Во временной таблице, созданной для целей тестирования, приведенный выше оператор создал столбец id AUTO_INCREMENT и вставил значения автоинкремента для каждой существующей строки в таблице, начиная с 1.

предположим, что у вас нет столбца для автоматического увеличения, например id, no, то вы можете добавить, используя следующий запрос:

 ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST 

Если у вас есть столбец, а затем измените на автоматический прирост, используя следующий запрос:

  ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY 

да, что-то вроде этого это сделало бы, может быть, не самое лучшее, хотя, возможно, вы захотите сделать резервную копию

 $get_query = mysql_query("SELECT `any_field` FROM `your_table`"); $auto_increment_id = 1; while($row = mysql_fetch_assoc($get_query)) { $update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'"); $auto_increment_id++; } 

обратите внимание, что any_field должно быть одинаковым при обновлении.

Для таких, как я получаю Multiple primary key defined ошибку, попробуйте:

 ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL; 

В MySQL v5.5.31 это задает столбец id как первичный ключ для меня и заполняет каждую строку с приращением.

Самое легкое и быстрое, что я нахожу, это

 ALTER TABLE mydb.mytable ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated, ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC); 

Я смог адаптировать эти инструкции к таблице с существующим неинкрементным первичным ключом и добавить в таблицу приростный первичный ключ и создать новый составной первичный ключ с старым и новым ключами в виде составного первичного ключа, используя следующие код:

 DROP TABLE IF EXISTS SAKAI_USER_ID_MAP; CREATE TABLE SAKAI_USER_ID_MAP ( USER_ID VARCHAR (99) NOT NULL, EID VARCHAR (255) NOT NULL, PRIMARY KEY (USER_ID) ); INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin'); INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster'); ALTER TABLE SAKAI_USER_ID_MAP DROP PRIMARY KEY, ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST, ADD PRIMARY KEY ( _USER_ID, USER_ID ); 

Когда это будет сделано, поле _USER_ID существует и имеет все числовые значения для первичного ключа точно так, как вы ожидали. С помощью «DROP TABLE» вверху вы можете запускать это снова и снова, чтобы поэкспериментировать с вариантами.

То, что я не смог получить, – это ситуация, когда есть входящие FOREIGN KEY, которые уже указывают на поле USER_ID. Я получаю это сообщение, когда пытаюсь сделать более сложный пример с входящим внешним ключом из другой таблицы.

 #1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150) 

Я предполагаю, что мне нужно снести все foreign keys, прежде чем делать таблицу ALTER, а затем перестроить их позже. Но пока я хотел поделиться этим решением с более сложной версией исходного вопроса, если другие столкнулись с этой ситуацией.

Экспортируйте таблицу, затем очистите таблицу, затем добавьте поле как уникальный INT, затем измените его на AUTO_INCREMENT, а затем снова импортируйте таблицу, которую вы экспортировали ранее.

Вы можете добавить новый столбец первичного ключа в существующую таблицу, которая может иметь порядковые номера, используя команду:

 ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY 

Я столкнулся с одной и той же проблемой, поэтому, что я сделал, я уронил поле для первичного ключа, а затем восстановил его и убедился, что он автоматически увеличивается. Это сработало для меня. Я надеюсь, что это поможет другим

ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NOT NULL AUTO_INCREMENT;

Как написать PHP для ALTER уже существующего поля (имя, в этом примере), чтобы сделать его первичным ключом? Нет, конечно, добавление каких-либо дополнительных полей «id» в таблицу.

Это таблица, созданная в настоящее время – Количество найденных записей: 4 имя VARCHAR (20) YES породы VARCHAR (30) YES цвет VARCHAR (20) YES вес SMALLINT (7) YES

Это искомый конечный результат (ТАБЛИЦА ОПИСАНИЯ) –

Найдено записей: 4 название VARCHAR (20) NO PRI breed VARCHAR (30) YES цвет VARCHAR (20) YES вес SMALLINT (7) YES

Вместо этого –

Количество найденных записей: 5 id int (11) NO PRI name VARCHAR (20) YES породы VARCHAR (30) YES цвет VARCHAR (20) YES вес SMALLINT (7) YES

после покупки ..

$ query = “ALTER TABLE скаковые лошади ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id)”;

Как это получить? –

Найдено записей: 4 название VARCHAR (20) NO PRI breed VARCHAR (30) YES цвет VARCHAR (20) YES вес SMALLINT (7) YES

т.е. INSERT / ADD .. и т. д. первичный ключ INTO первой записи поля (без добавления дополнительного поля «id», как указано ранее.

  • Можем ли мы обновить значения первичных ключей таблицы?
  • Выбор наилучшего первичного ключа + система нумерации
  • Должен ли я иметь выделенное поле первичного ключа?
  • Решение между искусственным первичным ключом и естественным ключом для таблицы Products
  • Interesting Posts

    Клавиатуры USB или PS / 2 реагируют быстрее?

    Как проверить, закодирована ли строка base64 или нет

    Короткое выражение IF – ELSE

    Tar – исключить определенные файлы

    Как сделать выбор Microsoft Word таким, как в текстовом редакторе

    Вопросы UIImagePNGR? / Изображения, повернутые на 90 gradleусов

    Как я могу получить начальный экран Windows 8 в Windows 10?

    Как заблокировать базу данных Firebase любому пользователю из определенного (электронной почты) домена?

    Как определить, какой HD участвует в средстве просмотра событий?

    Имеет ли обои, значки рабочего стола и автоматически спрятать панель задач впустую ресурсов процессора?

    Is -Djava.library.path = … эквивалентно System.setProperty (“java.library.path”, …)

    Использование VBA в Excel в Google Search в IE и возврат гиперссылки первого результата

    Что рекурсивно распространяется на все файлы в текущем каталоге?

    Как выйти из автозаполненных скобок в Intellij Idea (без использования клавиш со стрелками)?

    Черный экран при использовании bluestacks

    Давайте будем гением компьютера.