MySQL 索引检查顺序

标签 mysql sql

我正在运行 MySQL 我有一个如下所示的简单表格:

CREATE TABLE `new_schema`.`test1` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `unique1` VARCHAR(45) NULL,
  `unique2` VARCHAR(45) NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `unique1_UNIQUE` (`unique1` ASC),
  UNIQUE INDEX `unique2_UNIQUE` (`unique2` ASC));

然后我添加这样一行:

INSERT INTO `new_schema`.`test1` (`unique1`, `unique2`) VALUES ('x', 'x');

然后我在唯一列中添加具有相同值的另一行:

INSERT INTO `new_schema`.`test1` (`unique1`, `unique2`) VALUES ('x', 'x');

然后我将按预期收到此错误:

11:54:06    INSERT INTO `new_schema`.`test1` (`unique1`, `unique2`) VALUES ('x', 'x')   Error Code: 1062. Duplicate entry 'x' for key 'unique1_UNIQUE'  0.203 sec

我的问题是,如何更改 MySQL 检查我输入的唯一值的顺序。因此,在我上面的例子中,我提供了两个违反唯一条目的行为(unique1 和 unique2),但我希望它首先检查 unique2,所以错误将是这样的:

11:54:06    INSERT INTO `new_schema`.`test1` (`unique1`, `unique2`) VALUES ('x', 'x')   Error Code: 1062. Duplicate entry 'x' for key 'unique2_UNIQUE'  0.203 sec

谢谢, 标记

最佳答案

你试过那样改变姿势吗

    UNIQUE KEY INDEX `unique_UNIQUE` (`unique2`,`unique1`)

像那样:

 CREATE TABLE `new_schema`.`test1` (
   `id` INT NOT NULL AUTO_INCREMENT,
   `unique1` VARCHAR(45) NULL,
   `unique2` VARCHAR(45) NULL,
  PRIMARY KEY (`id`),
 UNIQUE KEY INDEX `unique_UNIQUE` (`unique2`,`unique1`)
 );

关于MySQL 索引检查顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22558154/

相关文章:

sql - Laravel 预加载 - 总是好吗?

mysql - mysql中唯一索引和非唯一索引在性能/实现方面的区别

php - 最后插入 ID 未返回

sql - 可序列化和可重复读取隔离级别有什么区别?

java - Hibernate,无法执行查询,SQL 错误 : 17059, SQLState:99999

mysql - 执行 "global"GROUP BY 存储为 `field1` , `field2` 的字段的最佳方法

sql - 表的规范化

mysql - 更新列显示 mysql 中的语法错误

MySql,SELECT * FROM 带索引列

mysql - 使用 MYSQL_ASSOC 而不是 MYSQL_BOTH 获取 mysql 数组是否会影响性能