MySQL (InnoDB): потребность удалить столбец, и сопровождающий ограничение внешнего ключа и индекс

Вы можете сделать следующее:

_dbContext.ChangeTracker.Entries().Where(e => e.Entity != null).ToList()
            .ForEach(e => e.State = EntityState.Detached);
10
задан OMG Ponies 30 April 2011 в 17:32
поделиться

3 ответа

Решенный вопрос состоит в том, чтобы сделать дублирующуюся таблицу.

> CREATE TABLE alums_alumphoto_new LIKE alums_alumphoto;
> ALTER TABLE .... // Drop constraint
> ALTER TABLE .... // Drop KEY
> ALTER TABLE .... // Drop the column
> INSERT INTO alums_alumphoto_new (SELECT id, alum_id, photo_id, media_id, updated FROM alums_alumphoto);
> RENAME TABLE alums_alumphoto TO alums_alumphoto_old, alums_alumphoto_new TO alums_alumphoto;

Если существует ошибка при выполнении, ПЕРЕИМЕНОВЫВАЮТ ТАБЛИЦУ, некоторые другие таблицы могли бы иметь ограничения внешнего ключа, ссылающиеся на эту таблицу, в этом случае этот целый подход глуп.:)

7
ответ дан 3 December 2019 в 14:44
поделиться

Попытайтесь комбинировать операторы DROP KEY и DROP FOREIGN KEY.

ALTER TABLE `alums_alumphoto` 
    DROP KEY KEY `alums_alumphoto_photo_id`,
    DROP FOREIGN KEY `photo_id_refs_id_63282119`;

ALTER TABLE `alums_alumphoto` 
    DROP COLUMN `photo_id`;
0
ответ дан 3 December 2019 в 14:44
поделиться

Точно, попробуйте это:

Сначала отбросьте Внешний ключ или Ограничение:

ALTER TABLE `alums_alumphoto` DROP FOREIGN KEY `photo_id_refs_id_63282119`;

Предыдущая команда удаляет Ограничение Внешнего ключа на столбец. Теперь можно отбросить столбец photo_id (индекс удален MySQL при отбрасывании столбца):

ALTER TABLE `alums_alumphoto` DROP COLUMN `photo_id`;

Aternatively, Вы могли объединить эти 2 операции в одну:

ALTER TABLE `alums_alumphoto` 
   DROP FOREIGN KEY `photo_id_refs_id_63282119` , 
   DROP COLUMN `photo_id`;
25
ответ дан 3 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: