Php 设置重复密钥的唯一优先级

Php 设置重复密钥的唯一优先级,php,mysql,Php,Mysql,我有下表 id year name activation 1 2013 TEST 1 id A_I year, name UNIQUE name, activation UNIQUE 我使用此查询插入/更新数据: INSERT INTO LISTE_DATI (year, name, activation) VALUES ('$varray[1]', '$varray[2]', '$varray[3]') ON DUPLICATE KEY UPDAT

我有下表

id   year   name   activation
1    2013   TEST   1

id A_I
year, name UNIQUE
name, activation UNIQUE
我使用此查询插入/更新数据:

INSERT INTO LISTE_DATI
    (year, name, activation)
VALUES
    ('$varray[1]', '$varray[2]', '$varray[3]')
ON DUPLICATE KEY UPDATE
    year= '$yr',
    name= '$na',
    activation= '$act'
如果我将此数据发送到表中:

$yr = 2014
$na = TEST
$act = 0
$yr = 2015
$na = TEST
$act = 1
查询
在表中插入
数据。这对我来说没关系

如果我将此数据发送到表中:

$yr = 2014
$na = TEST
$act = 0
$yr = 2015
$na = TEST
$act = 1
查询
更新表中的第一行
(2013/TEST/1)
。 在这种情况下,我想有一个插入太多


如何调整它?

您告诉您的
INSERT
查询,当它找到重复的(
UNIQUE
)键时,将更新该行

您正在插入
(2012,“测试”,1)
。这是一把重复的钥匙;
名称,激活
键,您的第二个
唯一
键!您已经有一行带有
'TEST',1
;id为1的行

INSERT
查询更新该行,因为它是一个重复的键


您需要修改表上的键,以便它反映您想要的数据。你想让<代码>插入< /Cord>查询来考虑一个副本吗?在此基础上创建您的
UNIQUE
键。

在所有三列上创建一个唯一键?了解更多信息,谢谢!因此,一个解决方案可能是删除第二个唯一密钥(名称、激活),而只保留第一个密钥(年份、名称)?@Perocat:这是一个解决方案。根据您的数据,您还可以在所有3个字段(年份、名称、激活)上创建唯一的密钥。谢谢。。不,所有3个字段上的唯一键都不起作用。我不能有两个相同名称的激活,但同一年有两个激活是的…有些东西还没有工作。现在我只有一个
唯一的(年份、名称)
。如果我使用
$yr=2014、$na=TEST、$att=0
运行查询,它将更新
而不是插入
。为什么?2014年,测试不是重复的钥匙…@Perocat:我不知道钥匙是否需要名字,但我通常会给他们一个。