在不检查自动增量主键的情况下替换为?

时间:2015-02-03 09:45:54

标签: mysql

我在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

如何检查现有数据并仅在需要时插入(忽略自动增量主键)?

2 个答案:

答案 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');

DEMO

唯一键的另一个例子

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

的ID
REPLACE INTO `table1` (id,text1) VALUES (5,'Banana');

DEMO