Mysql -唯一索引或列


Mysql - Unique index or columns

我想创建一个包含一些数据的mysql表。所有数据按3列条目排序,所有查询都依赖于这些列,例如

SELECT * FROM `mytable` WHERE `column1`=0 AND `column2`=0 AND `column3`=0

应该只返回结果。我的问题是,当插入新数据并且新数据获得与表中其他数据相同的值时,可能会发生重复,因此上面的查询将返回两个结果。我的代码将使用第一个结果,因此如果插入false,新数据可以覆盖已经存在的数据。我想通过将column1, column2和column3合并到BIGINT类型的column4中来防止这种情况(如果需要更大的索引,我可以更改为varbinary或其他东西),并以这种方式更改我的请求查询,例如

SELECT * FROM `mytable` WHERE `column1`=0 AND `column2`=1 AND `column3`=2

SELECT * FROM `mytable` WHERE `column4`=((0 << 16) | (1 << 8) | 2)
//Note: column1, column2 and column3 are all TINYINTs, therefore the << 8 and << 16

等等。但这使得查询的可读性和我的代码不太容易理解。是否有任何想法,我可以让我的表如何(与它的3列),并防止数据重复?

我不确定这是否是您想要的,但这里不可能添加重复项。

CREATE TABLE IF NOT EXISTS `table` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `colA` VARCHAR(50) NULL,
  `colB` VARCHAR(50) NULL,
  `colC` VARCHAR(50) NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `colABC_UNIQUE` (`colA` ASC, `colB` ASC, `colC` ASC))
ENGINE = InnoDB