ste*_*mcl 6 mysql upsert insert-update
我有一张桌子:
CREATE TABLE Students (studentId TEXT PRIMARY KEY, name TEXT);
Run Code Online (Sandbox Code Playgroud)
我想在表中插入记录,如果我插入学生两次,我希望第二个插入覆盖(更新)第一个记录.
INSERT INTO Students (StudentId, name) VALUES ('123', 'Jones');
INSERT INTO Students (StudentId, name) VALUES ('123', 'Jonas');
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方法是什么?
p.c*_*ell 10
试试REPLACE:
REPLACE INTO Students (StudentId, name) VALUES ('123', 'Jonas');
Run Code Online (Sandbox Code Playgroud)
REPLACE与INSERT的工作方式完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行.
您还可以使用以下INSERT ... ON DUPLICATE KEY UPDATE语法:
INSERT INTO Students
(StudentId, name)
VALUES ('123', 'Jones')
ON DUPLICATE KEY UPDATE
name = VALUES(name) ;
Run Code Online (Sandbox Code Playgroud)
看到这个答案:插入-忽略-VS-刀片式上重复键更新的之间的差异REPLACE,INSERT ... ON DUPLICATE KEY UPDATE以及INSERT IGNORE.
但请告诉我们这studentId TEXT PRIMARY KEY是一个错字.你真的有一个TEXT数据类型的主键吗?名称(studentId)表明它可能是一个简单INT或INT AUTO_INCREMENT.
| 归档时间: |
|
| 查看次数: |
17399 次 |
| 最近记录: |