Mysql 重复密钥更新时赢得';行不通

Mysql 重复密钥更新时赢得';行不通,mysql,Mysql,我花了好几个小时的时间来制作一个简单的MySQL命令,但它不起作用。 我有一个存储应用程序包ID的数据库,比如“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...

我花了好几个小时的时间来制作一个简单的MySQL命令,但它不起作用。 我有一个存储应用程序包ID的数据库,比如“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...
现在我想插入一个新条目,如果'com.android.package'不存在,如果它存在,我什么都不想做

我试过以下几点:

 INSERT INTO Packages (PackageID) VALUES ('com.android.package') ON DUPLICATE KEY UPDATE PackageID=VALUES(PackageID)
CREATE TABLE Packages (
   `ID` INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
   `PackageID` VARCHAR(30) NOT NULL,
   `PackageDesc` VARCHAR (100),
   UNIQUE(`PackageID`)
);
但它仍然会创建新条目,如:

| ID | PackageID           | PackageDesc       |
| 3  | com.android.package |                   |
| 4  | com.android.package |                   |
| 5  | com.android.package |                   |

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

为重复密钥更新上的
表模式建议如下:

 INSERT INTO Packages (PackageID) VALUES ('com.android.package') ON DUPLICATE KEY UPDATE PackageID=VALUES(PackageID)
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);
包含以下行:

# 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);
软件包
包含:

# ID, PackageID,            PackageDesc
'1', 'com.android.package', 'This is a package2'
这意味着,
更新
是由后者
插入
执行的


对于重复密钥更新的
要工作,
PackageID
必须是主键或唯一索引。您的表是这样吗?@GiorgosBetsos'PackageID'是一个字符串(文本),'ID'是唯一标识符。在这种情况下,重复密钥更新的
将不起作用,因为就MySQL而言没有重复项。那么我如何执行此任务?它仍然重复。当我在重复键更新PackageID=VALUES(PackageID),PackageDesc=VALUES(PackageDesc)上执行
INSERT-INTO-Packages(PackageID,PackageDesc)值('com.android.package','This a package2')
它创建了一个新条目,其中包含
com.android.package'和'This is a package2'
,但如果我再次执行该条目,它会用一个新id复制该条目。@fuseldieb您是否更改了表架构以使
PackageID
唯一?@fuseldieb但这是最关键的部分!大约一年后,你的回答被我接受了。对此表示抱歉:P