У меня есть база данных, и я взял дамп, используя --no-data
. Я пытаюсь импортировать эту структуру БД в пустой БД.
Я игнорирую другие запросы, следуя запросам, которые я пытаюсь выполнить,
set foreign_key_checks=0;
DROP TABLE IF EXISTS 'ACTIVITY';
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE 'ACTIVITY' (
'ID' int(11) NOT NULL AUTO_INCREMENT,
...
'ACTIVITY_BY_ID' int(11) DEFAULT NULL,
'ENTITY_TYPE' varchar(45) COLLATE utf8_unicode_ci NOT NULL, -- this
'ACTIVITY_TYPE' varchar(45) CHARACTER SET utf8 NOT NULL, -- this
...
PRIMARY KEY ('ID'),
KEY 'FK_ACTIVITY_TO_USER_idx' ('ACTIVITY_BY_ID'),
FULLTEXT KEY 'FK_FULL_TEXT_ACTIVITY_TYPE' ('ACTIVITY_TYPE'),
FULLTEXT KEY 'FK_FULL_TEXT_ENTITY_TYPE' ('ENTITY_TYPE'),
...
CONSTRAINT 'FK_ACTIVITY_TO_USER' FOREIGN KEY ('ACTIVITY_BY_ID') REFERENCES 'USER' ('ID') ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Вышеприведенный код не Error Code: 1215. Cannot add foreign key constraint
Он должен работать, поскольку foreign_key_checks установлен в 0.
Ниже приведен код sql для импорта таблицы USER
. Однако этот sql выполняется позже.
DROP TABLE IF EXISTS 'USER';
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE 'USER' (
'ID' int(11) NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY ('ID'),
..
) ENGINE=InnoDB AUTO_INCREMENT=4070 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Если я сначала выполнил сценарий USER
а затем ACTIVITY
, он работает, иначе это не так.
Строки, отмеченные знаком --this
для таблицы ACTIVITY
, вызывают проблему. Если я удалю две строки, код работает нормально.
Почему полнотекстовый индекс создает проблему с внешним ключом?
По-видимому, это была ошибка в сообществе сообщества mysql версии 5.7.8-rc
.
Мы повысились до 5.7.20
и это было решено.