【问题标题】:SQLITE and foreign keySQLITE 和外键
【发布时间】:2012-09-02 15:03:19
【问题描述】:

我正在查看一些这样定义的数据库表:

这是第一张桌子-

CREATE TABLE Point 
(

    Position integer unique not null,  
    Name text not null,                
);

第二张桌子是这样的:

CREATE TABLE namesPerPoint 
(

    PointKey integer not null,            -- unique ROWID in points table
    name text unique not null
);

现在,我的问题是 sqlite db 如何知道 PointKey 引用 Positions 表中的 rowid。它只是在评论中提到,为了用户方便。如果我自己必须这样做,我会使用 FOREIGN KEY 约束。 那么,这种语法正确吗?但这是大型成功运行系统的一部分,所有表都只是这样定义的。所以,我假设我错过了一些东西。

谢谢

【问题讨论】:

    标签: sqlite foreign-keys


    【解决方案1】:

    不,除非您创建外键约束。但首先,你需要turn on外键支持

    sqlite> PRAGMA foreign_keys = ON;
    

    向主表添加主键

    CREATE TABLE Point 
    (
    
        Position integer PRIMARY KEY,  
        Name text not null,                
    );
    

    然后添加外键

    CREATE TABLE namesPerPoint 
    (
        PointKey integer not null,            -- unique ROWID in points table
        name text unique not null,
        FOREIGN KEY (PointKey) REFERENCES Point(Position)
    );
    

    主键

    Source: SQLite Foreign Key Support

    【讨论】:

    • 这意味着这些人做错了。它只在他们的系统上工作,因为他们自己在他们的表中维护数据并且他们知道要放置什么值。但是,如果其他人试图修改它,他们最终可能会得到损坏的表。
    • 是的,我通常就是这样做的。但是当我看到这些表格时,我想可能有一些我不知道的东西,这就是我问这个问题的原因
    • @user333422 我猜不是完全损坏了表,但最终导致查询性能低下。
    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2014-01-17
    • 2019-08-09
    相关资源
    最近更新 更多