sql - REFERENCES 带或不带 FOREIGN KEY 有什么区别

标签 sql sqlite relational-database android-sqlite ddl

关于 SQLite,带或不带 FOREIGN KEY 的 REFERENCES 之间有什么区别?

这有什么区别

CREATE TABLE players_set ( 
    _id            INTEGER PRIMARY KEY AUTOINCREMENT
                           NOT NULL,
    player_id      INTEGER REFERENCES players ( _id ) ON DELETE CASCADE,
    players_set_id INTEGER REFERENCES players_set_names ( _id ) 
);

还有这个:

CREATE TABLE players_set ( 
    _id            INTEGER PRIMARY KEY AUTOINCREMENT
                           NOT NULL,
    player_id INTEGER,
    players_set_id INTEGER REFERENCES players_set_names ( _id ),
    FOREIGN KEY (player_id) REFERENCES players ( _id ) ON DELETE CASCADE        
);

我发现了另一个问题: Difference between using REFERENCES with and without FOREIGN KEY?

我读了the documentation ,但我并没有说清楚。

准确地说,我在 Android 上使用 SQLite(因此是标签)。我不知道这是否有任何区别,但如果它有自己的怪癖,那将对我了解非常有用。

最佳答案

FOREIGN KEY 语法比在列定义中内联定义更灵活(例如,它允许您定义复合外键,其中两个或多个字段的组合应该存在于引用列)。

在您的情况下,两个 DDL 语句之间没有区别。可以说,外键的内联定义只不过是语法糖。

关于sql - REFERENCES 带或不带 FOREIGN KEY 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21647710/

相关文章:

sql - 仅当传递的参数具有值时才使用 Where 子句中的 'Exists'

c# - 无法找到 Net Core NHibernate System.Data.SQLite

database - Eloquera 对象数据库

android - SQlite:数据只会第一次插入表中,第二次不会

php - 在 MySQL/PHP 中使用关系数据库过滤信息时出现问题

sql - 如何在 PostgreSQL 8.3 中将空值写入日期时间数组?

sql - SQL 文件的 TypeScript 生成

sql - 无法将 Windows 计数器表中的字符转换为日期时间

使用 group_concat 作为 select 语句中的列的 sqlite 子查询

sql - 使用SQL计算具有不同格式的项目