SQLite3中的REFERENCES关键字

JaT*_*aTo 10 sql sqlite keyword

我希望有人可以向我解释SQL关键字REFERENCES的用途

CREATE TABLE wizards(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT,
  age INTEGER
, color TEXT);

CREATE TABLE powers(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name STRING,
  damage INTEGER,
  wizard_id INTEGER REFERENCES wizards(id)
);
Run Code Online (Sandbox Code Playgroud)

我花了很多时间试着查看它,我最初认为它会限制你可以输入到powers表中的数据类型(基于是否为wizard_id)但是,我仍然能够将数据插入到两者中没有任何约束的列,我注意到了.

那么,关键字REFERENCES是否只是为了提高查询速度?它的真正目的是什么?

谢谢

Ian*_*ird 12

它为另一个表创建一个外键.这可以带来性能优势,但外键主要是关于数据完整性.这意味着,(在你的情况下)wizard_id申请的powers必须存在于一个价值id的领域wizards表.换句话说,权力必须指向有效的向导.许多数据库还使用此信息来传播删除或其他更改,因此表保持同步.

刚注意到这一点.您能够绕过键约束的原因可能是未启用外键.请参阅SQLite3文档中的启用外键.