Join
MySQL插入時如何引用主鍵
我有一個包含表
authors
和books
.我不知道如何正確分配
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) );
這是在我的表
authors
和books
表之間創建外鍵關係的正確方法嗎?
您需要聲明列本身,因此 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';