mySQL - 将值插入单个列会导致多行?
mySQL - 将值插入单个列会导致多行?
我正在向单列中插入多行数据。
下面是表格的定义:
CREATE TABLE Book ( ID INT PRIMARY KEY AUTO_INCREMENT, Title VARCHAR(100), Author VARCHAR(40), Pages INT, Price FLOAT, GENRE VARCHAR(30) );
+----+---------------------------+----------------+-------+--------+-----------+ | ID | Book_Title | Author | Pages | Price | GENRE | +----+---------------------------+----------------+-------+--------+-----------+ | 1 | The Lost Symbol | Dan Brown | 500 | 524.75 | Fiction | | 2 | Flamingo | NCERT | 235 | 345.55 | Text Book | | 3 | The Great Zoo of China | Mathew Reilly | 312 | 401.75 | Fantasy | | 4 | Walking from east to west | Ravi Zacharias | 240 | 220.45 | Biography | | 5 | The Time Machine | H.G Wells | 245 | 120.45 | Novel | | 6 | Flamingo | NCERT | 235 | 345.55 | Text Book | +----+---------------------------+----------------+-------+--------+-----------+
ALTER TABLE Book ADD COLUMN Year INT; INSERT INTO Book(Year) VALUES (1987), (2001), (1997), (1983), (1974), (2001);`
但是我得到了完全意外的结果:
+----+---------------------------+-------+--------+-----------+------+ | ID | Book_Title | Pages | Price | GENRE | Year | +----+---------------------------+-------+--------+-----------+------+ | 1 | The Lost Symbol | 500 | 524.75 | Fiction | NULL | | 2 | Flamingo | 235 | 345.55 | Text Book | NULL | | 3 | The Great Zoo of China | 312 | 401.75 | Fantasy | NULL | | 4 | Walking from east to west | 240 | 220.45 | Biography | NULL | | 5 | The Time Machine | 245 | 120.45 | Novel | NULL | | 6 | Flamingo | 235 | 345.55 | Text Book | NULL | | 7 | NULL | NULL | NULL | NULL | 1987 | | 8 | NULL | NULL | NULL | NULL | 2001 | | 9 | NULL | NULL | NULL | NULL | 1997 | | 10 | NULL | NULL | NULL | NULL | 1983 | | 11 | NULL | NULL | NULL | NULL | 1974 | | 12 | NULL | NULL | NULL | NULL | 2001 | +----+---------------------------+-------+--------+-----------+------+
PS: 我已经删除了列 Author
期望的结果是:
+----+---------------------------+-------+--------+-----------+------+ | ID | Book_Title | Pages | Price | GENRE | Year | +----+---------------------------+-------+--------+-----------+------+ | 1 | The Lost Symbol | 500 | 524.75 | Fiction | 1987 | | 2 | Flamingo | 235 | 345.55 | Text Book | 2001 | | 3 | The Great Zoo of China | 312 | 401.75 | Fantasy | 1997 | | 4 | Walking from east to west | 240 | 220.45 | Biography | 1983 | | 5 | The Time Machine | 245 | 120.45 | Novel | 1974 | | 6 | Flamingo | 235 | 345.55 | Text Book | 2001 | +----+---------------------------+-------+--------+-----------+------+
我参考了以下链接,但没有用:
服务器版本: 5.7.27-0ubuntu0.18.04.1
非常感谢您的帮助。
问题的原因是使用INSERT语句将值插入到单个列中会导致多行记录。解决方法是使用UPDATE语句代替INSERT语句。INSERT语句会创建新的记录,而你想要将更多的信息添加到现有的记录中。
具体的解决方法是使用UPDATE语句来更新每一行的值。你可以使用多个UPDATE语句,每个语句更新一行的值。例如:
UPDATE Book SET `Year` = 1987 WHERE ID = 1; UPDATE Book SET `Year` = 2001 WHERE ID = 2; UPDATE Book SET `Year` = 1997 WHERE ID = 3; UPDATE Book SET `Year` = 1983 WHERE ID = 4; UPDATE Book SET `Year` = 1974 WHERE ID = 5; UPDATE Book SET `Year` = 2001 WHERE ID = 6;
或者你可以使用CASE语句来更新每一行的值。例如:
UPDATE Book SET `Year` = CASE `ID` WHEN 1 THEN 1987 WHEN 2 THEN 2001 WHEN 3 THEN 1997 WHEN 4 THEN 1983 WHEN 5 THEN 1974 WHEN 6 THEN 2001 END WHERE `ID` IN (1,2,3,4,5,6);
如果你不使用ID过滤器,建议在CASE语句中添加else部分。
有人问是否可以使用循环来实现这个功能,而另一个人回答可以使用一个更简短的版本。如果这个方法解决了你的问题,请不要忘记接受并点赞。
最后,如果有人问是否可以将其包装在一个更简单的方法中,请更新答案。一旦答案可行,我会将其标记为答案,但在我获得15个声望之前,我的点赞不会公开显示。