返回

如何在 MySQL 中仅根据 Lastname 添加相同记录而不引发主键冲突?

mysql

如何在 MySQL 中添加相同记录(仅相同的 Lastname)

问题

如何在 MySQL 中添加相同记录,例如仅相同的 Lastname,而不会引发主键冲突?

解决方法

使用 ON DUPLICATE KEY UPDATE 子句,可以更新现有记录或插入新记录。

ON DUPLICATE KEY UPDATE 工作原理:

  1. 尝试插入新记录。
  2. 如果 Lastname 已存在(主键冲突),则执行 UPDATE 语句。
  3. 更新现有记录中的非主键列(Firstname、Address、Province)。
  4. 如果 Lastname 不存在,则插入新记录。

代码示例

CREATE TABLE Person (
    Lastname VARCHAR(15) PRIMARY KEY,
    Firstname VARCHAR(15),
    Address VARCHAR(30),
    Province VARCHAR(30)
);

INSERT INTO Person (
    Lastname,
    Firstname,
    Address,
    Province
)
VALUES
    ('Soriano', 'MamaMo', 'Sa tabi-tabi', 'Pangasinan');

-- 使用 ON DUPLICATE KEY UPDATE 子句更新或插入记录
INSERT INTO Person (
    Lastname,
    Firstname,
    Address,
    Province
)
VALUES
    ('Soriano', 'PapaMo', 'Sa kabila-kabila', 'Pampanga')
ON DUPLICATE KEY UPDATE
    Firstname = 'PapaMo',
    Address = 'Sa kabila-kabila',
    Province = 'Pampanga';

SELECT * FROM Person WHERE Lastname = 'Soriano';

输出

| Lastname | Firstname | Address               | Province  |
|----------|-----------|------------------------|-----------|
| Soriano   | MamaMo    | Sa tabi-tabi           | Pangasinan |
| Soriano   | PapaMo    | Sa kabila-kabila       | Pampanga   |

常见问题解答

  1. 为什么会出现主键冲突?

    • 主键列(通常是 Lastname)不允许重复值,以确保记录的唯一性。
  2. ON DUPLICATE KEY UPDATE 的好处是什么?

    • 允许更新现有记录或插入新记录,而无需编写单独的 UPDATE 和 INSERT 语句。
  3. ON DUPLICATE KEY UPDATE 可以更新哪些列?

    • 除了主键列之外的任何列。
  4. ON DUPLICATE KEY UPDATE 会影响现有记录吗?

    • 是的,如果 Lastname 相同,它将更新现有记录的非主键列。
  5. 何时使用 ON DUPLICATE KEY UPDATE?

    • 当需要更新或插入记录时,其中 Lastname 或其他主键列是唯一的标识符。