#mysql #macos
#mysql #macos
Вопрос:
Я пытаюсь создать несколько очень простых таблиц, одна из которых имеет отношение FK к другой. Но MySQL не распознает правильно созданную таблицу, которая существует. Я нахожусь на macOS 10.14 и использовал DMG для MySQLWorkbench и MySQL Community Server версии 8
Уже предпринятые шаги: -Остановить / перезапустить MySQL через MySQLWorkbench -Остановить / перезапустить MySQL через системные настройки macOS -Удалить таблицы -Удалить DB -Запустить mysqlcheck -четырехкратная проверка всех вариантов написания / регистров -перенастроить структуры запросов для пошагового выполнения
/* Creating the building_t table */
CREATE TABLE building_t (
buildingkey VARCHAR(10),
buildingname VARCHAR(50),
buildingaddress VARCHAR(150),
buildingcity VARCHAR(50),
buildingstate VARCHAR(2),
buildingzipcode INT,
buildingmanagerphone INT,
PRIMARY KEY (buildingkey)
);
Результат:
16:43:17 СОЗДАЙТЕ ТАБЛИЦУ building_t (buildingkey VARCHAR(10),
buildingname VARCHAR(50), buildingaddress VARCHAR(150),
buildingcity VARCHAR(50), buildingstate VARCHAR(2),
buildingzipcode INT, buildingmanagerphone INT, PRIMARY KEY (buildingkey) ) 0 строк, затронутых на 0,0083 сек.
СЛЕДУЮЩИЙ ШАГ:
/* Creating the apartment_t table */
CREATE TABLE apartment_t (
apartmentkey VARCHAR(10),
apartmentrooms VARCHAR(50),
buildingkey VARCHAR(10),
PRIMARY KEY (apartmentkey),
FOREIGN KEY (buildingkey) REFERENCES building_t(buildingkey)
);
Результат:
16:45:44 СОЗДАЙТЕ ТАБЛИЦУ apartment_t (apartmentkey VARCHAR(10),
VARCHAR комнат апартаментов(50), buildingkey VARCHAR(10), ПЕРВИЧНЫЙ КЛЮЧ (apartmentkey), ВНЕШНИЙ КЛЮЧ (buildingkey) ССЫЛАЕТСЯ на building_t(buildingkey) ) Код ошибки: 1824. Не удалось открыть таблицу, на которую ссылается building_t, 0.00069 сек.
СЛЕДУЮЩИЙ ШАГ:
/* Change the apartment_t create statement to remove FK */
CREATE TABLE apartment_t (
apartmentkey VARCHAR(10),
apartmentrooms VARCHAR(50),
buildingkey VARCHAR(10),
PRIMARY KEY (apartmentkey)
);
Результат:
16:47:13 СОЗДАНИЕ ТАБЛИЦЫ apartment_t (переменный ключ apartmentkey(10),
переменный ключ apartmentrooms(50), переменный ключ buildingkey(10), ПЕРВИЧНЫЙ КЛЮЧ (apartmentkey)) 0 строк затронуто на 0,0077 сек.
СЛЕДУЮЩИЙ ШАГ:
/*alter the apartment_t table to add the FK after the fact */
alter table apartment_t ADD FOREIGN KEY (buildingkey) REFERENCES building_t(buildingkey)
Результат:
16:48:09 изменить таблицу apartment_t, ДОБАВИТЬ ВНЕШНИЙ КЛЮЧ (buildingkey), ССЫЛКИ building_t(buildingkey) Код ошибки: 1146. Таблица ‘wildwood.apartment_t’ не существует 0.0011 сек
Ни одна из этих проблем не должна возникать, поскольку все форматирование правильное. Обратите внимание, что когда я пытаюсь сослаться в инструкции CREATE TABLE, ошибка «не удалось открыть …», но в инструкции ALTER TABLE говорится, что таблица, которую нужно изменить, не существует.
Комментарии:
1. Так в чем проблема??? Я не вижу никаких ошибок.
2. @eric Они там «Код ошибки: 1824. Например, не удалось открыть таблицу, на которую ссылается building_t»
3. Я не могу воспроизвести вашу проблему в этой скрипте MySQL 5.7 db
4. @Eric проверьте разделы, заключенные в кавычки. Я обновил форматирование, чтобы выделить их
5. Вы же не выполняете разные инструкции в разных транзакциях, не так ли? Чтобы быть уверенным, что произойдет, если вы выдадите
COMMIT
после каждого оператора?