Я сталкиваюсь с несколькими проблемами при попытке создания внешних ключей для своих таблиц в MySql (Innodb). Не могли бы вы помочь мне с ними?mysql (innodb) проблемы с ограничениями внешнего ключа
Ссылочные таблицы:
*create table entity
{
PID INT(20) auto inc not null,
ENTITYID INT(20) not null,
details VARCHAR(100) not null,
primary key(PID,ENTITYID)
}
create table user
{
USERID int(20) auto inc not null,
NAME VARCHAR(45) not null,
joindate DATETIME not null,
location VARCHAR(100) not null,
primary key(USERID,NAME) not null
}*
Referencing table:
*create table C
{
ENTITYID INT(20) not null,
NAME VARCHAR(45) not null,
foreign key ENTITYID_C constraint ENTITYID references entity(ENTITYID) on delete cascade,
foreign key name_C constraint NAME references user(NAME) on delete cascade,
primary key(ENTITYID,NAME)
}*
мне нужно 2 внешних ключей в таблице С, так как запись в C должны быть удалены, когда либо соответствующий орган или соответствующий пользователь будет удален.
Когда я пытаюсь создать таблицу C Я столкнулся с ошибкой: ERROR 1005: Не удается создать таблицу (errno: 150). Я подозреваю, что это связано с тем, что я не придерживаюсь правил, изложенных в спецификации mysql. http://dev.mysql.com/doc/refman/5.4/en/innodb-foreign-key-constraints.html
Что означает нижняя часть/правило спецификации?
«InnoDB требует индексов на внешних ключах и ссылочных ключах, чтобы проверки внешнего ключа могли быть быстрыми и не требовать сканирования таблицы. В таблице ссылок должен быть индекс, в котором столбцы внешнего ключа перечислены в качестве первого столбцы в том же порядке ».
Означает ли это, что внешние ключи в таблице C должны соответствовать первичным ключам в суставах и пользовательских таблицах, так что ENTITYID в таблице сущностей должен быть первым в первичном ключе, а NAME в таблице пользователя должен быть первым в первичный ключ. Другими словами, должны ли мои первичные ключевые слова быть переписаны, как показано ниже?
entity table --> primary key(ENTITYID,PID) ,
user table --> primary key(NAME,USERID)
Если да, то когда я попытка реорганизовать ключевые декларации, как указано выше я бегу в ошибки 1075. «Некорректное определение таблицы, может быть только одна автоматическая колонка и она должна быть определена в качестве ключа.»
Как я могу сделать ключ с автоматическим добавлением (ключ суррогата) вторым в списке индексных указателей, чтобы я соответствовал спецификации?
Спасибо!
Спасибо за Ваше сообщение! Я переделываю свои таблицы, чтобы избежать этих проблем. – user190914