返回
如何在 MySQL 中仅根据 Lastname 添加相同记录而不引发主键冲突?
mysql
2024-03-29 05:34:44
如何在 MySQL 中添加相同记录(仅相同的 Lastname)
问题
如何在 MySQL 中添加相同记录,例如仅相同的 Lastname,而不会引发主键冲突?
解决方法
使用 ON DUPLICATE KEY UPDATE 子句,可以更新现有记录或插入新记录。
ON DUPLICATE KEY UPDATE 工作原理:
- 尝试插入新记录。
- 如果 Lastname 已存在(主键冲突),则执行 UPDATE 语句。
- 更新现有记录中的非主键列(Firstname、Address、Province)。
- 如果 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 |
常见问题解答
-
为什么会出现主键冲突?
- 主键列(通常是 Lastname)不允许重复值,以确保记录的唯一性。
-
ON DUPLICATE KEY UPDATE 的好处是什么?
- 允许更新现有记录或插入新记录,而无需编写单独的 UPDATE 和 INSERT 语句。
-
ON DUPLICATE KEY UPDATE 可以更新哪些列?
- 除了主键列之外的任何列。
-
ON DUPLICATE KEY UPDATE 会影响现有记录吗?
- 是的,如果 Lastname 相同,它将更新现有记录的非主键列。
-
何时使用 ON DUPLICATE KEY UPDATE?
- 当需要更新或插入记录时,其中 Lastname 或其他主键列是唯一的标识符。