Не могу понять, почему я получаю ошибку при создании таблиц БД - PullRequest
0 голосов
/ 31 марта 2019

Я не могу на всю жизнь понять, почему мой код создания таблицы не работает должным образом. Я использую Express / JS / SQL для создания таблиц и предоставления внешних ключей ограничения, но один из них дает мне ошибку с ключами

Я не могу изменить порядок, поскольку для внешних ключей нужны таблицы в таком порядке, он работает совершенно нормально. Если я удалю внешний ключ ALARM, но мне нужно его включить. Любые предложения будут действительно полезны.

У меня есть этот код, и при его создании таблица аварийных сигналов не создается.

let records = [ 
  "create table IF NOT EXISTS FILE (cal_id INT AUTO_INCREMENT PRIMARY KEY, file_name VARCHAR(60) NOT NULL, version INT NOT NULL, prod_id VARCHAR(256) NOT NULL)", 
  "create table IF NOT EXISTS EVENT (event_id INT AUTO_INCREMENT PRIMARY KEY, summary VARCHAR(1024), start_time DATETIME NOT NULL, location VARCHAR(60), organizer VARCHAR(256), cal_file INT NOT NULL, CONSTRAINT FOREIGN KEY(cal_file) REFERENCES FILE(cal_id) ON DELETE CASCADE)", 
  "create table IF NOT EXISTS ALARM (alarm_id INT AUTO_INCREMENT PRIMARY KEY, action VARCHAR(256) NOT NULL, `trigger` VARCHAR(256) NOT NULL, event INT NOT NULL, CONSTRAINT FOREIGN KEY(event) REFERENCES FILE(event_id) ON DELETE CASCADE)"
];

Я называю это так

for (let rec of records) {
    db.query(rec, function (err) {
        if (err) console.log("Something went wrong. "+err);
    });
} 

Я получаю ошибку Что-то пошло не так. Ошибка: ER_CANT_CREATE_TABLE: Невозможно создать таблицу test. ALARM (номер ошибки: 150 «Ограничение внешнего ключа сформировано неправильно»)

Есть идеи, как это исправить? Спасибо за ваше время.

1 Ответ

1 голос
/ 31 марта 2019

последний запрос должен быть, вы ссылаетесь на FILE для внешнего ключа вместо EVENT

  "create table IF NOT EXISTS ALARM (alarm_id INT AUTO_INCREMENT PRIMARY KEY, action VARCHAR(256) NOT NULL, `trigger` VARCHAR(256) NOT NULL, event INT NOT NULL, CONSTRAINT FOREIGN KEY(event) REFERENCES FILE(event_id) ON DELETE CASCADE)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...