У меня есть база данных mysql, которая имеет parent_table
utf-8 с 2 столбцами (id varchar (14), имя varchar (256)) then I создал первичный ключ для этой таблицы, составляющего 2 колонки, но у меня не было, чтобы создать его с ограниченным 200 длиной, - из-за максимальной длины указательного проблемно как этотКак добавить внешний ключ, который ссылается на первичный ключ с двумя столбцами с «ограниченной длиной»
alter table parent_table add primary key(id,name (200));
каждая вещь была в порядке, пока я пришел для создания нового child_table
с ссылкой на внешние ключи родителем, дочерняя таблица имеет 2 столбца (child_id varchar (14), child_name varchar (256))
Примечание: обе таблицы одинаковы кодировка (UTF-8), такой же двигатель, тот же тип данных, такой же длины хотя всякий раз, когда я пытаюсь создать внешний ключ
alter table child_table add foreign key test_foreign_key (child_id,
child_name) references parent_table (id, name);
Я всегда получаю ошибка
Код ошибки: 1005. Невозможно создать таблицу
mci
.#sql-1724_3
(ошибка: 150 «ограничение внешнего ключа неправильно сформировано»)
тогда, когда я упала первичный ключ в parent_table
и модифицированной колонку имен в обоих parent_table
и child_table
быть VARCHAR (200), а затем создаются первичный ключ в parent_table
нормально, без ограничения, например:
alter table parent_table add primary key(id,name);
тогда, когда я создал внешний ключ в child_table
, он работал !!!
К сожалению, я не могу изменить длину столбца имени до 200 в моей реальной базе данных, потому что он уже заполнен более длинными данными.
как я могу создать внешний ключ в child_table
, который ссылается на композит (2 колонки) первичный ключ в parent_table
с ограниченной длины индекса (200)? могу сделать что-то вроде этого ..
alter table child_table add foreign key test_foreign_key (child_id,
child_name) references parent_table (id, name(200)); // 200
Можете ли вы создать SQLFiddle, чтобы мы могли видеть вашу структуру, потому что это только тип данных выпуск ......... –
@PiyushGupta [ссылка] (http://sqlfiddle.com/#!9/602e7/1) **, но я думаю, что эта ссылка не будет жить вечно **, поэтому здесь создаются инструкции 'create table parent_table (id varchar (14), имя varchar (256)) CHARACTER SET utf8 COLLATE utf8_bin; создать таблицу chield_table (chield_id varchar (14), chield_name varchar (256)) CHARACTER SET utf8 COLLATE utf8_bin; alter table parent_table добавить первичный ключ (id, name (200)); ', обратите внимание, что это первый раз, когда я использую sqlfiddle, так что простите меня, если я что-то пропустил –
Как я могу понять Если вы хотите изменить родительский стол, тогда сначала вам необходимо удалить связанное ограничение внешнего ключа, а затем изменить таблицу, и после изменения вы можете снова применить одно и то же ограничение внешнего ключа ............ Но убедитесь, что оба типа данных должны быть одинаковыми, иначе вы не сможете применить ограничение внешнего ключа ... –