在SQLite数据库浏览器中创建外键

Jef*_*eff 37 sqlite android-sqlite

对不起新手问题.

我使用SQLite数据库浏览器创建了我的表,但是:

  1. 我不知道如何使用该应用程序指定我的外键

  2. 如何在表之间创建关系图?

Chi*_*sai 63

我知道很久以前就问过这个问题,但我找到了.它内置于GUI中.您只需拖动并使那些名称,类型选项卡稍微小一点,以便为外键选项卡腾出空间.将鼠标指针放在末尾并拖动标题.

我的SQLite浏览器版本是3.7.0版.

在此输入图像描述

  • 在 SQLite 浏览器版本 3.12.0 中,在“外键子句...”字段中输入后,您必须在键盘上按 Enter 键,然后单击“确定”,否则外键约束将不会被保存。 (5认同)
  • 谢谢!我用鼠标扩大了窗口。 (3认同)

phi*_*ngs 13

我找不到使用"数据库结构"选项卡定义外键约束的方法.我强烈建议使用脚本定义表定义和约束,而不是使用图形编辑器构建它们 - 这使得创建新数据库和跟踪模式更改变得更加容易.

举个例子,假设我们有两个表:一个定义文件名,一个指定用于压缩的方法,我们可以在定义时向file_definition表添加一个外键约束.

CREATE TABLE [compression_state] (
    [compression_state_id] INTEGER  PRIMARY KEY NOT NULL,
    [value] TEXT  NOT NULL
);

CREATE TABLE [file_definition] (
    [file_id] INTEGER  NOT NULL  PRIMARY KEY AUTOINCREMENT,
    [compression_state_id] INTEGER  NOT NULL,
    [name] TEXT NOT NULL,
    FOREIGN KEY(compression_state_id) REFERENCES compression_state(compression_state_id)
);
Run Code Online (Sandbox Code Playgroud)

但是,默认情况下,SQLite不会强制执行约束,因此每次连接到数据库时,都必须发出以下命令以启用约束检查.

PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

文档中的更多详细信息.

如果表已经存在并且您不想构建完整的脚本,那么您运气不好,SQLite不支持在生成表后添加外键,请参见此处:SQLite未实现的SQL功能


M K*_*aei 8

转到编辑表定义窗口

点击添加字段

用类型命名它:整数

向右滚动并找到外键列

在新行的外键列下双击

选择主表及其id字段

单击确定

单击写入更改

在此处输入图片说明


Kon*_*ras 6

从SQLite文档:

CREATE TABLE artist(
  artistid    INTEGER PRIMARY KEY, 
  artistname  TEXT
);
CREATE TABLE track(
  trackid     INTEGER,
  trackname   TEXT, 
  trackartist INTEGER     -- Must map to an artist.artistid!
);  
Run Code Online (Sandbox Code Playgroud)

最后:

CREATE TABLE track(
  trackid     INTEGER, 
  trackname   TEXT, 
  trackartist INTEGER,
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
Run Code Online (Sandbox Code Playgroud)

在SQL浏览器环境的数据库浏览器(v 3.8.0 - Sqlite v 3.9.2)中,当您为track表格添加数据库字段以及PK,AI和其他列时,您可以找到外键列.

在那里,在这个例子中,你只需要添加artist(artistid)的中trackartist排.
然后创建外键约束.


SKN*_*SKN 0

SQLite3 中的触发器强制执行外键约束。链接https://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers 将帮助您解决第一个问题。