【问题标题】:mySQL - Inserting values into a single colume results in multiple rows?mySQL - 将值插入单个列会导致多行?
【发布时间】:2019-08-26 16:04:19
【问题描述】:

我在单列中插入多行。 这是表格:

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 |
+----+---------------------------+-------+--------+-----------+------+

我提到了这些但没有用:

Server version: 5.7.27-0ubuntu0.18.04.1

感谢所有帮助。

【问题讨论】:

  • 什么是你意想不到的部分?正在按预期工作。
  • 看起来你想要 UPDATE 数据库上已有的行而不是 INSERT 新行
  • 它工作正常。它插入了所有这些年。
  • 大概了解INSERTUPDATE的区别。

标签: mysql sql-insert alter


【解决方案1】:

使用UPDATE 语句代替INSERT。插入将创建新记录,而您想向现有记录添加更多信息。

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;

OR

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 when 子句中添加 else 部分。

【讨论】:

  • 谢谢,我可以使用某种循环来做到这一点吗?
  • 你也可以做一个简短的版本。我会更新我的答案。如果这解决了您的问题,请不要忘记接受并投票。
  • 是的,请用简短版本更新答案。一旦它起作用,我会将其标记为答案,但在我获得 15 名声望之前,我的 Upvotes 不会公开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 2015-02-28
  • 1970-01-01
  • 2014-09-25
  • 2014-12-02
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多