Как изменить внешний ключ таблицы MySQL с помощью командной строки

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

 Álvaro González06 мая 2016 г., 11:27
Обратите внимание, что вы можете найти документацию по продукту в Google сmysql 5.7 alter table .
 el ninho17 июн. 2012 г., 20:22
Я пытался использовать Google, и он не нашел ничего, что бы охватывало именно этот случай. Я знаю, делать это в MySQL Administrator или создавать таблицу с внешним ключом, но я не знаю этого в упомянутом вопросе.

Ответы на вопрос(4)

соединенных вместе, и вы получите ошибку, которая заканчиваетсяerrorno 15x это, скорее всего, означает, что существуют другие таблицы, которые зависят от внешнего ключа, который вы пытаетесь удалить.

Чтобы удалить внешний ключ, когда вы получите эту ошибку, вам нужно будет сделатьSET FOREIGN_KEY_CHECKS = 0; и затем вы должны сначала удалить внешние ключи на таблицы, у которых нет других зависимых от них таблиц. Затем вы можете успешно сбросить внешние ключи в следующей таблице в цепочке и так далее.

Когда вы закончите, убедитесь, что вы запускаетеSET FOREIGN_KEY_CHECKS = 1; снова.

foreign key и создать еще один. Например, вот так:

ALTER TABLE my_table DROP FOREIGN KEY my_key;
ALTER TABLE my_table ADD CONSTRAINT my_key FOREIGN KEY ('some_id') 
REFERENCES some_new_table ('some_other_id') ON UPDATE CASCADE ON DELETE CASCADE;
 24 апр. 2017 г., 10:01
Ваш код работает, но у меня есть связанный вопрос. Когда я попытался объединить эти два запроса в один запрос,ALTER TABLE my_table DROP ..., ADD ...  Я получил ошибку,errno: 121 "Duplicate key on write or update", Я что-то упустил или действительно невозможно объединить эти запросы?

help alter table вmysql командная строка и вывод очень понятен.
Ищуadd constraint сforeign key и примените его на вашем столе.

mysql> help alter table
Name: 'ALTER TABLE'
Description:
Syntax:
ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification] ...

alter_specification:
    ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
  | ADD [COLUMN] (column_definition,...)
  | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        PRIMARY KEY [index_type] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
  | ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (index_col_name,...)
        [reference_definition]
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name column_definition
        [FIRST|AFTER col_name]
  | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP {INDEX|KEY} index_name
  | DROP FOREIGN KEY fk_symbol
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO] new_tbl_name
  | ORDER BY col_name
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
  | DISCARD TABLESPACE
  | IMPORT TABLESPACE
  | table_option ...

ALTER TABLE the_table_name 
    ADD CONSTRAINT the_name_of_column_you_want_to_use_as_foreign_key 
       REFERENCES other_table_primary_id (Column_name )

Ваш ответ на вопрос