sql - SQLite3 中的 REFERENCES 关键字

标签 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)
);

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

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

谢谢

最佳答案

它创建一个 Foreign Key到另一张 table 。这可以带来性能优势,但外键主要与数据完整性有关。这意味着(在您的情况下)powerswizard_id 字段必须具有存在于 wizards 的 id 字段中的值表。换句话说,权力必须指的是一个有效的巫师。许多数据库还使用此信息来传播删除或其他更改,因此表保持同步。

刚刚注意到这一点。您能够绕过键约束的一个原因可能是未启用外键。参见 Enabling foreign keys在 SQLite3 文档中。

关于sql - SQLite3 中的 REFERENCES 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19186388/

相关文章:

java - 不使用 java 关键字的目的是什么?

jquery - 'action' 是 jQuery 中的关键字吗?

python - 等同于'execfile'的Python 3.3

sql - Qt 中的持久化类

sql - SELECT 之后的 DROP 是否仍然产生数据?

iphone - SQLite 查询中的子查询不起作用

sql - 如何在sql select语句中执行乘法

sql - 计算每天两个日期时间字段之间的平均时差

mysql - 在 MySQL 中计算组合 ID,然后将其存储为库存

android - 如何从Android程序将SQLite数据库文件上传到FTP服务器