У меня довольно странная проблема с внешними ключами, а именно, она не работает должным образом:
ALTER TABLE contact_contactlist
ADD FOREIGN KEY (contact_id) REFERENCES contacts(id) ON DELETE CASCADE;
ALTER TABLE contact_contactlist
ADD FOREIGN KEY (contactlist_id) REFERENCES contactLists(id) ON DELETE CASCADE;
ALTER TABLE contactLists
ADD FOREIGN KEY (owner_id) REFERENCES serviceAccounts(id);
(автоматически генерируется Doctrine 2)
Тем не менее, это прекрасно работает:
ALTER TABLE `contact_contactlist`
ADD CONSTRAINT `contact_contactlist_ibfk_5`
FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `contact_contactlist_ibfk_6`
FOREIGN KEY (`contactlist_id`) REFERENCES `contactLists` (`id`) ON DELETE CASCADE;
ALTER TABLE `contactLists`
ADD CONSTRAINT `contactlists_ibfk_1`
FOREIGN KEY (`owner_id`) REFERENCES `serviceAccounts` (`id`);
(phpMyAdmin экспорт тех же ключей выше)
Проблема проявляется в том, что MySQL не позволит мне что-либо вставлять в таблицы, если ключи определены с помощью SQL из первого блока, жалуясь на ссылочную целостность (даже если ссылочные записи существуют), но все будет хорошо, если Я установил ключи с помощью SQL из второго блока.
Мне известно, что я могу просто "продолжать и быть счастливым", используя последнее определение ключа SQL, но я бы предпочел, чтобы я мог как-то просто придерживаться сгенерированного Doctrine SQL, так как я еще на ранней стадии разработки модель будет меняться довольно часто (таким образом, двухступенчатое ручное закрепление ключа станет довольно раздражающим).
EDIT
Вот операторы создания
CREATE TABLE contact_contactlist (
contact_id BIGINT NOT NULL,
contactlist_id BIGINT NOT NULL,
INDEX contact_contactlist_contact_id_idx (contact_id),
INDEX contact_contactlist_contactlist_id_idx (contactlist_id),
PRIMARY KEY(contact_id, contactlist_id))
ENGINE = InnoDB;
CREATE TABLE contactLists (
id BIGINT AUTO_INCREMENT NOT NULL,
owner_id INT DEFAULT NULL,
name VARCHAR(255) NOT NULL,
INDEX contactLists_owner_id_idx (owner_id),
PRIMARY KEY(id))
ENGINE = InnoDB;