Я выполняю создание таблицы SQL
и во время выполнения:
create table discos_compactos (
id_disco_compacto int,
titulo_cd varchar(60) not null,
id_disquera int not null,
constraint pk_discos_compactos primary key (id_disco_compacto),
constraint fk_id_disquera foreign key (id_disquera) references disqueras_cd
);
появляется ошибка
Ограничение внешнего ключа сформировано неправильно
Я взял пример из книги, но до этого мы создали две таблицы:
CREATE TABLE TIPOS_MUSICA(
ID_TIPO INT,
NOMBRE_TIPO VARCHAR(20 NOT NULL,
CONSTRAINT UN_NOMBRE_TIPO UNIQUE (NOMBRE_TIPO),
CONSTRAINT PK_TIPOS_MUSICA PRIMARY KEY (ID_TIPO)
);
Д
CREATE TABLE DISQUERAS_CD (
ID_DISQUERA INT,
NOMBRE_COMPAÑIA VARCHAR(60) DEFAULT
'Independiente' NOT NULL,
CONSTRAINT PK_DISQUERAS_CD PRIMARY KEY (ID_DISQUERA)
);
Что может быть не так в коде?Я разместил его, как в примере...
У меня была та же ошибка, вызванная тем, что новые таблицы были созданы с неправильным сопоставлением и другим механизмом хранения, чем остальная часть базы данных.
Это было исправлено путем изменения сопоставления новых таблиц на правильное (с latin_swedish на utf8) и механизма хранения (MyISAM) на остальной части базы данных (innoDB).
Это удобно сделать из интерфейса phpMyAdmin. Я только что решил это, поэтому до сих пор не могу понять, почему эти атрибуты загружались иначе, чем остальная часть БД.
Привет и хорошо, у меня была такая же проблема, и ничего из того, что здесь написано, у меня не работало, так как я понял, что у меня одинаковая длина значений между внешним и основным, они были практически близнецами в этом смысле, а затем Я сделал следующее... .
[TABLE1]: это основная таблица, на которую я хотел сослаться...
[TABLE2]: это таблица, содержащая внешние ссылки на table1.
что иностранец не дал мне сделать с таблицей 1, так это следующее:
У меня были разные символы, когда я их изменил, и ошибка исчезла. надеюсь послужит многим
Обратите внимание: если вы работаете в среде Unix, проблема может заключаться в том, что имя таблицы указано в верхнем регистре, а «внешний ключ» относится к имени в нижнем регистре.
Если служба MySQL находится в Windows, это не ваша проблема.
Взгляните на Чувствительность к регистру идентификатора .
Я не нашел его на испанском, но в основном там говорится, что в MySQL базы данных соответствуют каталогам и таблицам как минимум одному файлу, поэтому чувствительность операционной системы к регистру определяет поведение базы данных в этом отношении.
Баг в том, что нужно указать столбец, на который ссылается FK в сторонней таблице. Это будет сделано так:
Таблица должна иметь индекс столбца
id_disquera
, чтобы использовать его во внешнем ключе.Создание вашей таблицы
discos_compactos
будет:Чтобы создать его
foreing key
, вы должны сначала добавить индекс и убедиться, что поле имеет тот же формат, что и поле, которое вы собираетесь добавить, если это int (10), оно должноforeign
быть таким же. если у него есть такие поля, какunsigned
илиzerofill
также, в вашем случае вы не добавили к нему поле ссылочной таблицы.У меня такая же проблема. После многих часов экспериментов я обнаружил, что проблема заключалась в следующем: одна таблица была MYISAM, а другая — INNODB.
Я настроил их обоих в MYISAM, и это позволило мне установить ограничения