ON DUPLICATE KEY UPDATE不起作用

时间:2015-10-15 05:38:23

标签: mysql

我正在尝试制作一个简单的MySQL命令,但它无法正常工作。 我有一个数据库,其中存储了应用程序的包ID,例如'com.android.package'。 它们的存储方式如下:

<b>

现在我想插入一个新条目,如果'com.android.package'不存在,如果它存在,我想什么都不做......

我试过以下:

| ID | PackageID           | PackageDesc       |
| 1  | com.android.package | This is a package |
| 2  | com.android.test2pa | This is package 2 |

And so on...

但它仍会创建新条目,如:

 INSERT INTO Packages (PackageID) VALUES ('com.android.package') ON DUPLICATE KEY UPDATE PackageID=VALUES(PackageID)

我不知道我的错误在哪里。

1 个答案:

答案 0 :(得分:2)

Packages建议的ON DUPLICATE KEY UPDATE表架构按预期工作如下:

CREATE TABLE Packages (
   `ID` INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
   `PackageID` VARCHAR(30) NOT NULL,
   `PackageDesc` VARCHAR (100),
   UNIQUE(`PackageID`)
);

执行此语句后:

INSERT INTO Packages (PackageID, PackageDesc) VALUES 
('com.android.package', 'This is a package') 
ON DUPLICATE KEY UPDATE PackageID=VALUES(PackageID);

Packages包含以下行:

# ID, PackageID,            PackageDesc
'1', 'com.android.package', 'This is a package'

如果您现在执行以下语句:

INSERT INTO Packages (PackageID, PackageDesc) VALUES 
('com.android.package', 'This is a package2') 
ON DUPLICATE KEY UPDATE PackageID=VALUES(PackageID), PackageDesc=VALUES(PackageDesc);

Packages包含:

# ID, PackageID,            PackageDesc
'1', 'com.android.package', 'This is a package2'

这意味着后者UPDATE执行了INSERT INTO

Demo here