【问题标题】:SQL insert new values into new column from the beginning of tableSQL 从表的开头将新值插入新列
【发布时间】:2021-11-24 11:15:27
【问题描述】:

我在我的hotel 表中添加了一个名为roomNumber 的新列,该表已经有一些值。但是当我尝试将新值插入hotel 时,这些值将从当前数据完成的位置插入,而不是从开始处插入。

我的查询

INSERT INTO hotel
(roomNumber) 
VALUES
    (20),
    (60),
    (100),
    (20),
    (20),
    (150),
    (50),
    (50),
    (30),
    (50);

值从 where id = 10 开始插入,而不是我希望它插入 where id = 1 (在开头)

【问题讨论】:

  • INSERT 语句与图像不匹配。
  • "...值从 id = 10 开始插入,而不是我希望它插入 where id = 1 (开头)..." -- 你为什么关心具体ID 列的值?使用哪个 ID 并不重要。唯一重要的考虑是主键必须是唯一的;就这样。此外,表没有固有的行顺序;换句话说,没有开始也没有结束。

标签: mysql sql database


【解决方案1】:

如果您INSERT 数据,您将为新数据创建新行。如果您想更改现有行,您需要 UPDATE 这些行。

因此,要更新三个现有行,您需要三个 UPDATE 查询*

UPDATE hotel set roomNumber = 20 where id=8
UPDATE hotel set roomNumber = 60 where id=9
UPDATE hotel set roomNumber = 100 where id=10

我假设您的主键列名为 id - 您可能有不同的名称。

然后要插入剩余数据,您可以运行INSERT 查询:

INSERT hotel (name, roomNumber) 
  values 
    ('Excelsior',20),
    ('Manor Park Hotel', 20) 
    etc.

我在这里发明了一些酒店名称,因为插入没有酒店名称的房间数似乎没有什么意义。

请注意,“表的开头”在 SQL 中没有实际意义。除非您指定 ORDER BY 子句,否则无法保证行的顺序,但这与此处无关。要更新特定行,您需要指定标识该行的WHERE 子句。主键是执行此操作的常用方法。

* 如果您使用合适的 WHERE 子句,您可以使用单个 UPDATE 查询来完成三个更新,但这对于三行来说似乎是不必要的复杂。

【讨论】:

    【解决方案2】:

    当使用 SQL insert 时,您正在向表中插入新行。您想更新现有行,然后对其余新数据运行插入操作。

    UPDATE statement with multiple WHERE conditions

    【讨论】:

      【解决方案3】:

      所以你想从 ID 1 插入数据?

      您需要使用UPDATE,而不是INSERT。因为行已经存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-11
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        • 1970-01-01
        相关资源
        最近更新 更多