Mysql 力';替换为';使用某个索引
我有一个MySQL(5.0)表,其中有3行被视为组合唯一索引:Mysql 力';替换为';使用某个索引,mysql,Mysql,我有一个MySQL(5.0)表,其中有3行被视为组合唯一索引: CREATE TABLE `test`.`table_a` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `field1` varchar(5) COLLATE latin1_swedish_ci NOT NULL DEFAULT '', `field2` varchar(5) COLLATE latin1_swedish_ci NOT NULL DEFAULT '', `field
CREATE TABLE `test`.`table_a` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`field1` varchar(5) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
`field2` varchar(5) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
`field3` varchar(5) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
PRIMARY KEY (`Id`),
INDEX `IdxUnqiue` (`field1`(5),`field2`(5),`field3`(5))
) ENGINE=MyISAM;
此表应填写替换为查询:
REPLACE INTO
table_a
(
Field1,
Field2,
Field3
)
VALUES
(
"Test1",
"Test2",
"Test3"
)
我想看到的行为是,这个查询总是覆盖上一个插入的行,因为IdxUnique
是…ahm,触发的。但不幸的是,仍然有主索引似乎在起作用,并且总是插入新行
我得到的是:
Query was executed 3 times:
+---Id---+---Field1---+---Field2---+---Field3---+
| 1 | Test1 | Test2 | Test2 |
| 2 | Test1 | Test2 | Test2 |
| 3 | Test1 | Test2 | Test2 |
+--------+------------+------------+------------+
我想要的是:
Query was executed 3 times:
+---Id---+---Field1---+---Field2---+---Field3---+
| 3 | Test1 | Test2 | Test2 |
+--------+------------+------------+------------+
<> p> >我可以告诉<代码>替换为< /代码>使用一个特定的索引或考虑一个“更重要的”然后另一个? 使用<代码>索引< /Cord>关键字,您不创建一个,而是一个正常的非唯一索引。这就是为什么允许您插入非独立的行(field1、field2、field3)
因此,您只需在CREATE TABLE
构造中将索引设置为UNIQUE
,如下例所示:
CREATE TABLE `table_a` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`field1` varchar(5) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
`field2` varchar(5) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
`field3` varchar(5) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
PRIMARY KEY (`Id`),
UNIQUE `IdxUnqiue` (`field1`(5),`field2`(5),`field3`(5))
) ENGINE=MyISAM;
插入测试数据:
REPLACE INTO table_a (Field1, Field2, Field3) VALUES ("Test1", "Test2", "Test3");
REPLACE INTO table_a (Field1, Field2, Field3) VALUES ("Test1", "Test2", "Test3");
REPLACE INTO table_a (Field1, Field2, Field3) VALUES ("Test1", "Test2", "Test3");
结果:
SELECT * FROM table_a;
+----+--------+--------+--------+
| Id | field1 | field2 | field3 |
+----+--------+--------+--------+
| 3 | Test1 | Test2 | Test3 |
+----+--------+--------+--------+
1 row in set (0.01 sec)
哎呀…我错了,我只是忘了勾选方框。啊,但这是有效的…奇怪…这意味着我在我的“真实”表的某个地方有一个逻辑错误,破坏了我的索引。无论如何谢谢你!如果您没有唯一的密钥,有没有办法做到这一点。与insert类似,但如果在特定列上找到具有相同值的特定行,是否会进行更新?