📜  在 sqlite3 中创建多个相互引用的表 - SQL (1)

📅  最后修改于: 2023-12-03 15:37:31.987000             🧑  作者: Mango

在 SQLite3 中创建多个相互引用的表 - SQL

在 SQLite3 中,创建多个相互引用的表可以使用外键和约束(constraints)来实现。这可以帮助我们处理复杂的数据结构,其中多个表需要协同工作。

创建表

我们将首先创建两个表:usersposts,并在它们之间建立一个一对多的关系,其中一个用户可以拥有多篇文章。

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  name TEXT,
  email TEXT UNIQUE
);

CREATE TABLE posts (
  id INTEGER PRIMARY KEY,
  title TEXT,
  body TEXT,
  user_id INTEGER NOT NULL,
  FOREIGN KEY(user_id) REFERENCES users(id)
);

在上述代码中,我们使用了 CREATE TABLE 语句来定义两个表:usersposts

users 表包含三个列:idnameemail。其中,id 列是主键,nameemail 列将分别存储用户的姓名和电子邮件地址。

posts 表包含四个列:idtitlebodyuser_id。其中,id 列是主键,titlebody 列将分别存储文章的标题和内容,user_id 列将存储发布该文章的用户的id。我们使用 FOREIGN KEY 语句建立了与 users 表的关系。

插入数据

接下来,我们向 usersposts 表中插入一些数据,以检查表之间的关系是否有效。

INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com');
INSERT INTO users (name, email) VALUES ('Jane Doe', 'janedoe@example.com');

INSERT INTO posts (title, body, user_id) VALUES ('Hello World', 'This is my first post.', 1);
INSERT INTO posts (title, body, user_id) VALUES ('My Second Post', 'This is my second post.', 1);
INSERT INTO posts (title, body, user_id) VALUES ('Another Post', 'Here is another post.', 2);

在上述代码中,我们使用 INSERT INTO 语句将数据插入 usersposts 表。注意,我们将两篇文章都分配给了 id 为 1 的用户。

查询数据

为了验证我们建立的关系,我们可以使用 JOIN 查询从两个表中获取相关数据。

SELECT users.name, posts.title, posts.body
FROM users
JOIN posts
ON users.id = posts.user_id;

这将返回一个结果集,其中包含了所有用户和其发布的文章的信息。

总结

在 SQLite3 中,创建多个相互引用的表可以使用外键和约束来定义需要的关系。在创建了这些表并向其插入了数据后,可以使用 JOIN 查询来检查表之间的关系是否有效。