如何向现有 SQLite 表添加外键?

How do I add a foreign key to an existing SQLite table?(如何向现有 SQLite 表添加外键?)
本文介绍了如何向现有 SQLite 表添加外键?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有下表:

CREATE TABLE child( 
  id INTEGER PRIMARY KEY, 
  parent_id INTEGER, 
  description TEXT);

如何在 parent_id 上添加外键约束?假设启用了外键.

How do I add a foreign key constraint on parent_id? Assume foreign keys are enabled.

大多数示例都假设您正在创建表 - 我想将约束添加到现有表中.

Most examples assume you're creating the table - I'd like to add the constraint to an existing one.

推荐答案

你不能.

尽管向表中添加外键的 SQL-92 语法如下所示:

Although the SQL-92 syntax to add a foreign key to your table would be as follows:

ALTER TABLE child ADD CONSTRAINT fk_child_parent
                  FOREIGN KEY (parent_id) 
                  REFERENCES parent(id);

SQLite 不支持 ALTER TABLE 命令的 ADD CONSTRAINT 变体 (sqlite.org:SQLite 未实现的 SQL 功能).

SQLite doesn't support the ADD CONSTRAINT variant of the ALTER TABLE command (sqlite.org: SQL Features That SQLite Does Not Implement).

因此,在sqlite 3.6.1中添加外键的唯一方法是在CREATE TABLE过程中,如下所示:

Therefore, the only way to add a foreign key in sqlite 3.6.1 is during CREATE TABLE as follows:

CREATE TABLE child ( 
    id           INTEGER PRIMARY KEY, 
    parent_id    INTEGER, 
    description  TEXT,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
);

不幸的是,您必须将现有数据保存到临时表中,删除旧表,使用 FK 约束创建新表,然后从临时表中复制数据.(sqlite.org - 常见问题解答:Q11)

Unfortunately you will have to save the existing data to a temporary table, drop the old table, create the new table with the FK constraint, then copy the data back in from the temporary table. (sqlite.org - FAQ: Q11)

这篇关于如何向现有 SQLite 表添加外键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)