Я пытаюсь изменить таблицу, в которой нет ни первичного ключа, ни столбца auto_increment. Я знаю, как добавить столбец первичного ключа, но мне было интересно, можно ли автоматически вставить данные в столбец первичного ключа (у меня уже есть 500 строк в БД и я хочу дать им идентификатор, но я не хочу делать это вручную) , Есть предположения? Большое спасибо.
mysql
primary-key
FlyingCat
источник
источник
alter table
чтобы добавить ключ, но MySQL не будет генерировать идентификаторы для полей, у которых их еще нет. Вам нужно будет вручную обновить существующие поля, а затем убедиться, что ваш новый auto_increment начинается с правого смещения - по умолчанию он равен «1», и в любом случае вы просто получите ошибки дублирующихся ключей.Ответы:
ALTER TABLE
Заявление добавленияPRIMARY KEY
колонки корректно работает в моем тестировании:Во временной таблице, созданной для целей тестирования, вышеприведенный оператор создал
AUTO_INCREMENT
id
столбец и вставил значения автоинкремента для каждой существующей строки в таблице, начиная с 1.источник
FIRST
например,ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
для этого значения,SELECT * FROM table_name WHERE id = LAST_INSERT_ID()
и большинство API-интерфейсов языка программирования предлагают некоторую функцию / метод для возврата этого значения в код приложения.Предположим, у вас нет столбца для автоинкремента, такого как id, нет, тогда вы можете добавить, используя следующий запрос:
Если у вас есть столбец, то перейдите к автоматическому приращению, используя следующий запрос:
источник
FIRST
в конце делает?id
столбец первым в таблице, а не последним, что является поведением по умолчанию.да, что-то вроде этого сделало бы это, может быть, не самое лучшее, вы можете сделать резервную копию
обратите внимание, что
any_field
выбранный вами при обновлении должен быть одинаковым.источник
Для таких, как я, получаю
Multiple primary key defined
ошибку, попробуйте:На MySQL v5.5.31 это установило
id
столбец как первичный ключ для меня и заполнило каждую строку возрастающим значением.источник
Самый простой и быстрый способ найти это
источник
Мне удалось адаптировать эти инструкции, взять таблицу с существующим первичным ключом без инкремента, добавить добавочный первичный ключ в таблицу и создать новый составной первичный ключ со старым и новым ключами в качестве составного первичного ключа, используя следующие код:
Когда это сделано, поле _USER_ID существует и содержит все числовые значения для первичного ключа в точности так, как вы ожидаете. С «DROP TABLE» вверху вы можете запускать это снова и снова, чтобы экспериментировать с вариациями.
То, что я не смог заставить работать, - это ситуация, когда есть входящие FOREIGN KEY, которые уже указывают на поле USER_ID. Я получаю это сообщение, когда пытаюсь сделать более сложный пример с входящим внешним ключом из другой таблицы.
Я предполагаю, что мне нужно разрушить все внешние ключи перед выполнением таблицы ALTER, а затем восстановить их. Но сейчас я хотел бы поделиться этим решением с более сложной версией исходного вопроса на случай, если другие столкнутся с этой ситуацией.
источник
Экспортируйте свою таблицу, затем очистите таблицу, затем добавьте поле как уникальный INT, затем измените его на AUTO_INCREMENT, затем снова импортируйте таблицу, которую вы экспортировали ранее.
источник
Вы можете добавить новый столбец первичного ключа к существующей таблице, которая может иметь порядковые номера, используя команду:
источник
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
Я столкнулся с той же проблемой, поэтому я удалил поле для первичного ключа, затем воссоздал его и удостоверился, что он автоматически увеличивается. Это сработало для меня. Я надеюсь, что это помогает другим
источник
ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NOT NULL AUTO_INCREMENT ;
Здесь tableName - это имя вашей таблицы,
tableName - это имя вашего столбца, который должен быть изменен.
MEDIUMINT - это тип данных вашего существующего первичного ключа
AUTO_INCREMENT вы должны добавить только auto_increment после не нуль
Это сделает этот первичный ключ auto_increment ......
Надеюсь, это полезно :)
источник
Как написать PHP, чтобы изменить уже существующее поле (имя, в этом примере), чтобы сделать его первичным ключом? Конечно, без добавления каких-либо дополнительных полей 'id' в таблицу.
Эта таблица в настоящее время создана - Количество записей найдено: 4 название VARCHAR (20) ДА порода VARCHAR (30) ДА окрас VARCHAR (20) ДА вес МАЛЕНЬКИЙ (7) ДА
Это конечный результат, который требуется (ТАБЛИЦА ОПИСАНИЯ) -
Количество найденных записей: 4 Название VARCHAR (20) NO PRI породы VARCHAR (30) YES окрас VARCHAR (20) YES вес SMALLINT (7) YES
Вместо того, чтобы получить это -
Количество найденных записей: 5 id int (11) НЕТ ПРИ ИМЕНИ VARCHAR (20) ДА породы VARCHAR (30) ДА окрас VARCHAR (20) ДА вес МАЛЕНЬКИЙ (7) ДА
после попытки ..
$ query = "ALTER TABLE скаковых лошадей ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id)";
Как это получить? -
Количество найденных записей: 4 Название VARCHAR (20) NO PRI породы VARCHAR (30) YES окрас VARCHAR (20) YES вес SMALLINT (7) YES
т.е. INSERT / ADD .. и т. д. первичный ключ INTO первой записи поля (без добавления дополнительного поля 'id', как указано ранее.
источник