我想用一些数据创建一个Mysql表。所有数据按3列条目排序,所有查询都依赖于这些列,例如
SELECT * FROM `mytable` WHERE `column1`=0 AND `column2`=0 AND `column3`=0
只应返回结果。我的问题是插入新数据时可能出现的重复,并且新数据与表中的其他数据具有相同的值,因此上面的查询将返回两个结果。我的代码将使用第一个结果,因此如果插入false,新数据可能会覆盖现有数据。我想通过将column4,column2和column3联合在b4INT类型的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列)并防止数据重复?
提前致谢。
答案 0 :(得分:1)
我不确定这是否是你想要的,但在这里不可能添加重复项。
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