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