我在MySQL服务器中有以下表格(tbl_test
):
id AUTO_INCRECMENT PRIMARY
text1 VARCHAR(20)
并插入一行数据:
INSERT INTO tbl_test (text1) VALUES ('Apple')
id text1
===========
1 Apple
然后,我计划使用REPLACE INTO
检查现有值并在需要时插入:
REPLACE INTO tbl_test (text1) VALUES ('Apple')
但它插入了一个新行。
id text1
===========
1 Apple
2 Apple
如何检查现有数据并仅在需要时插入(忽略自动增量主键)?
答案 0 :(得分:4)
您可以使用UPSERT
INSERT INTO tbl_test
(`text1`)
VALUES( 'Apple')
ON DUPLICATE KEY UPDATE
`text1` = VALUES(text1);
答案 1 :(得分:1)
截至官方文档REPLACE
REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值
您必须在语句的语句中指定已使用的主键添加唯一索引以查看其实际操作
对于现有的主键,例如1次使用
REPLACE INTO `table1` (id,text1) VALUES (1,'Apple1');
唯一键的另一个例子
ALTER TABLE `table1` ADD UNIQUE INDEX `indexu` (`text1`);
示例数据
INSERT INTO `table1` (id,text1) VALUES (1,'Apple');
INSERT INTO `table1` (id,text1) VALUES (2,'Banana');
允许更新值Banana
REPLACE INTO `table1` (id,text1) VALUES (5,'Banana');