<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Sqlite - Tag - 印记一瞥</title><link>https://blog.hosiet.me/tags/sqlite/</link><description>Sqlite - Tag - 印记一瞥</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Mon, 29 Jun 2015 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.hosiet.me/tags/sqlite/" rel="self" type="application/rss+xml"/><item><title>转载：SQLite 外键</title><link>https://blog.hosiet.me/posts/2015/06/29/sqlite-foreign-key/</link><pubDate>Mon, 29 Jun 2015 00:00:00 +0000</pubDate><author>Boyuan Yang</author><guid>https://blog.hosiet.me/posts/2015/06/29/sqlite-foreign-key/</guid><description><![CDATA[<h1 id="sqlite外键foreign-key支持">SQLite外键(Foreign Key)支持</h1>
<hr>
<h2 id="声明">声明</h2>
<p>本篇文章转载自 <a href="http://y150988451.iteye.com/blog/952584" target="_blank" rel="noopener noreffer ">ITeye:y150988451</a> 的博文，著作权归原作者所有。</p>
<p>由 <a href="https://hosiet.me/" target="_blank" rel="noopener noreffer ">hosiet</a> 转载并重新排版。再次转载请保留声明。</p>
<h2 id="外键的定义">外键的定义</h2>
<p>从 3.6.19 版开始，SQLite 支持外键约束。（Ubuntu 10.04 的 SQLite 版本是 3.6.22，Debian 6.0 的 SQLite 版本是 3.7.0，Ubuntu 15.04 的 SQLite 版本是 3.8.7.4，供参考）</p>
<p>外键用来强制约束两个表之间“存在”的关系。例如，考虑下面的SQL命令建立的schema：</p>
<pre><code>CREATE TABLE artist(
    artistid INTEGER PRIMARY KEY,
    artistname TEXT
    );
CREATE TABLE track(
    trackid INTEGER,
    trackname TEXT,
    trackartist INTEGER —- 必须映射到一个 artist.artistid 记录
);
</code></pre>
<p>使用这个数据库的应用可以假定：对于在 track 表中的每一行，都在 artist 表都存在一个对应的行。不幸的是，如果用户使用外部工具编辑数据库，或者在应用程序中存在一个 bug，那么可能在 track 表中插入一行，而在 artist 表中没有相应的记录。或者，在 artist 表中删除某些行，就会在 track 表里留下孤儿行(orphaned rows)，它们在 artist 表中剩下的记录找到任何对应的行。这可能在以后会导致应用的功能出错，或者至少让编写应用程序更复杂。</p>]]></description></item></channel></rss>