无法弄清楚为什么我在创建数据库表时出错

时间:2019-03-31 01:59:50

标签: javascript sql express mariadb

我无法终生弄清楚为什么我的创建表代码无法正常工作。我正在运行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:无法创建表testALARM(错误号:150“外键约束格式不正确”)

关于如何解决此问题的任何想法?谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:1)

最后一个查询应该是,您要引用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)"