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:我不知道钥匙是否需要名字,但我通常会给他们一个。