Mysql

這個 mysql INSERT 語句有什麼問題?

  • July 8, 2020

我有表:

Book:
- id:(int) primary key, autoincrement, not null,
- title:(varchar) not null,
- price: (decimal) not null

Artical:
- id:(int) primary key, autoincrement, not null,
- title:(varchar) not null,
- price: (decimal) not null,
- book_id:(int) foreign key referencing book

我已經在 Book 表中有幾本書,而 Artical 表是空的,我想在 Artical 中有插入語句,它將插入數據並正確填寫 book_id 外鍵。我提出了這個不好的說法,但我覺得我很接近,這裡是:

INSERT INTO Artical (id,title,price,book_id) 
VALUES (
   null,
   'Six faces of shadow',
   15, 
   ( 
       SELECT book.id 
       FROM book 
       JOIN Artical AS ar 
       WHERE book.title = ar.title
   )
);

正確的語法是僅使用值或查詢,而不是兩者的混合。

但是,您可以在查詢中插入值。

INSERT INTO Artical
(title, price, book_id)
SELECT 
'Six faces of shadow',
15,
book.id
FROM book 
JOIN Artical AS ar ON book.id = ar.book_id

另請注意,您不應該加入title列,特別是因為您已經在兩個表之間建立了外鍵關係。

您可以將 NULL 插入 auto_increment 列,但也可以將其省略。

最後但可能是最重要的提示:您的表格未正確規範化。桌子 Artical 是乾什麼用的?書名和價格已經在 Book 表中。你應該重新考慮一下。但這不在這個問題的範圍內。

插入數據有兩種方式:

  1. 如果您必須在Artical特定的表中插入數據,book title請執行以下操作
INSERT 
INTO Artical (title, price, book_id) 
VALUES (
   'Six faces of shadow', 
   15, 
   (
       SELECT book_id FROM book 
       WHERE book.title = "Six faces of shadow"
   )
);
  1. 如果您想添加所有帶有 id 的書名,請執行以下操作
INSERT 
INTO Artical (title, price, book_id) 
SELECT title, price, book_id FROM book

希望這個幫助!!!

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