php - Mysql - 唯一索引或列

标签 php mysql sql

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

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

应该只返回结果。我的问题是,当插入新数据并且新数据与表中的其他数据具有相同的值时,可能会出现重复,因此上面的查询将返回两个结果。我的代码将使用第一个结果,因此如果插入错误,新数据可能会覆盖已经存在的数据。我想通过将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

关于php - Mysql - 唯一索引或列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22431639/

相关文章:

mysql - 将 MySQL 字段名定义为变量

php - 根据预订系统中的可用房间打印 HTML 表格

sql - 存储销售税信息的最佳方式

sql - 插入语句在函数内部不起作用(PostgreSQL)

php - 服务器中的磁盘配额超出警告

具有 2 个条件的 MySQL Crosstab 聚合

php - 使用 PDO 获取最后插入的行 ID(不合适的结果)

php - 为什么mysqli open transcation锁住数据库?

javascript - 从 JSON 中的 symfony 3 应用程序填充谷歌地图

javascript - 仅当显示模态时才下载模态中的图片