Join

MySQL插入時如何引用主鍵

  • August 13, 2018

我有一個包含表authorsbooks.

我不知道如何正確分配books表中的外鍵。我閱讀了此連結中提供的資訊,並按如下方式建構了我的 DDL 查詢:

CREATE TABLE if not exists authors(
-> author_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(30)
);

CREATE TABLE if not exists books(
-> book_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> title VARCHAR(255),
-> genre VARCHAR(30),
-> FOREIGN KEY(author_id) REFERENCES authors(author_id)
);

這是在我的表authorsbooks表之間創建外鍵關係的正確方法嗎?

您需要聲明列本身,因此 books 表應如下所示:

CREATE TABLE if not exists books
( book_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT
, title VARCHAR(255) NOT NULL
, genre VARCHAR(30) NOT NULL
, author_id INT UNSIGNED NOT NULL

,    FOREIGN KEY(author_id) REFERENCES authors(author_id)
);

我在列標題和類型上添加了 NOT NULL,因為我相信它們在大多數情況下是強制性的。

我會說您還需要能夠在現實生活中唯一標識作者的東西,讓我們假設 name 可以:

CREATE TABLE if not exists authors
( author_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
, name VARCHAR(30) NOT NULL UNIQUE
);

現在您可以插入一本新書,例如:

INSERT INTO books (title, genre, author_id)
SELECT 'The Shining', 'Horror', author_id
FROM authors
WHERE name = 'Stephen King';

引用自:https://dba.stackexchange.com/questions/214769