我有一张桌子:
CREATE TABLE Students (studentId TEXT PRIMARY KEY, name TEXT);
如果我想要两次插入学生,我想在表格中插入记录 第二个插入覆盖(更新)第一个记录。
INSERT INTO Students (StudentId, name) VALUES ('123', 'Jones');
INSERT INTO Students (StudentId, name) VALUES ('123', 'Jonas');
这样做的最佳方式是什么?
答案 0 :(得分:8)
尝试REPLACE
:
REPLACE INTO Students (StudentId, name) VALUES ('123', 'Jonas');
REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。
答案 1 :(得分:6)
您还可以使用 INSERT ... ON DUPLICATE KEY UPDATE
语法:
INSERT INTO Students
(StudentId, name)
VALUES ('123', 'Jones')
ON DUPLICATE KEY UPDATE
name = VALUES(name) ;
请参阅此回答:insert-ignore-vs-insert-on-duplicate-key-update了解REPLACE
,INSERT ... ON DUPLICATE KEY UPDATE
和INSERT IGNORE
之间的差异。
但请告诉我们 studentId TEXT PRIMARY KEY
是一个错字。你真的有一个TEXT
数据类型的主键吗?名称(studentId
)表明它可以是简单的INT
或INT AUTO_INCREMENT
。
答案 2 :(得分:5)
如果您使用的是MySql - 只需使用REPLACE而不是INSERT
答案 3 :(得分:0)
很抱歉复活了这个,但我有一个类似的问题,但是有一个表已经有数据,没有外键,所以我的解决方案非常简单 我必须添加一个名为“temp_id”的新列并将其作为主键,然后删除旧的ID列,然后将“temp_id”列重命名为“id”。