如何在表格中只有3行并且只更新它们?
我有settings
表,并且在第一次运行时没有任何内容,所以我想插入3条记录,如下所示:
id | label | Value | desc -------------------------- 1 start 10 0 2 middle 24 0 3 end 76 0
在PHP脚本之后,我需要从一个查询更新此设置。 我已经研究过REPLACE INTO,但我最终在DB中有重复的行。
这是我当前的查询:
$query_insert=" REPLACE INTO setari (`eticheta`, `valoare`, `disabled`)
VALUES ('mentenanta', '".$mentenanta."', '0'),
('nr_incercari_login', '".$nr_incercari_login."', '0'),
('timp_restrictie_login', '".$timp_restrictie_login."', '0')
";
有什么想法吗?
这是create table语句。这样你就可以看到我遗失的东西。
CREATE TABLE `setari` (
`id` int(10) unsigned NOT NULL auto_increment,
`eticheta` varchar(200) NOT NULL,
`valoare` varchar(250) NOT NULL,
`disabled` tinyint(1) unsigned NOT NULL default '0',
`data` datetime default NULL,
`cod` varchar(50) default NULL,
PRIMARY KEY (`eticheta`,`id`,`valoare`),
UNIQUE KEY `id` (`eticheta`,`id`,`valoare`)
) ENGINE=MyISAM
答案 0 :(得分:1)
作为explained in the manual,需要在(标签,值)或(标签,值,desc)上创建UNIQUE索引,以便REPLACE INTO确定唯一性。
答案 1 :(得分:1)
您想要的是使用“ON DUPLICATE KEY UPDATE”语法。阅读完整的详细信息但是,基本上您需要为您的某个字段设置唯一或主键,然后启动正常的插入查询并将该代码(以及您想要实际更新的内容)添加到最后。然后,db引擎将尝试添加信息,当它遇到已经插入的重复键时,它已经知道只是使用新信息更新您告诉它的所有字段。
答案 2 :(得分:0)
我只是跳过头痛并使用临时表。快速而干净。
SQL Server允许您通过为您创建一个不存在的临时表来选择它。但是,mysql要求您首先创建临时数据库,然后插入其中。
1。 创建空临时表。
CREATE TEMPORARY TABLE IF NOT EXISTS insertsetari
SELECT eticheta, valoare, disabled
FROM setari
WHERE 1=0
2。 将数据插入临时表。
INSERT INTO insertsetari
VALUES
('mentenanta', '".$mentenanta."', '0'),
('nr_incercari_login', '".$nr_incercari_login."', '0'),
('timp_restrictie_login', '".$timp_restrictie_login."', '0')
3。 删除临时表中已在目标表中找到的行。
DELETE a FROM insertsetari AS a INNER JOIN setari AS b
WHERE a.eticheta = b.eticheta
AND a.valoare = b.valoare
AND a.disabled = b.disabled
4。 将临时表残余行插入目标表。
INSERT INTO setari
SELECT * FROM insertsetari
5。 清理临时表。
DELETE insertsetari
评论: