php - 在mysql和PHP中检查一个字段是否有属性 `UNIQUE`

标签 php mysql indexing unique-index

如何检查表中的字段是否设置为UNIQUE

例如,我有一个名为 users 的表,其中一个字段 email 设置为 UNIQUE 和一个字段 picture未设置为 UNIQUE,我想在选择之前检查该字段是否设置为 UNIQUE 如果没有,则不要执行 SELECT

我尝试SELECT然后计算返回的行数,如果超过1那么它不是UNIQUE

"SELECT * FROM table WHERE email='$email'"
//...some mysql php line later
if($count > 1){
    //return nothing
}

但是效率不高,没有重复怎么办。

PHP 中检查字段是否设置为 UNIQUE 的最佳方法是什么?

编辑:没有重复并不意味着它有 UNIQUE 属性

最佳答案

来自documentation of SHOW INDEX (由@diEcho 发现):

SHOW INDEX returns the following fields:

Non_unique -- 0 if the index cannot contain duplicates, 1 if it can.

Column_name -- The column name.

尝试:

SHOW INDEXES
FROM $tablename
WHERE Column_name='$field'
AND NOT Non_unique

请注意,这里假设不存在跨多列的 UNIQUE 索引。如果可以,那么您可能希望使用子查询排除它们。

另请注意,禁用的索引也显示在此查询中(Comment 列的文档中提到了禁用索引的可能性)。似乎没有反射(reflect)这一点的列,因此如果您禁用了索引,则可能需要解析 Comment 列。

无需将 Non_unique 与数字进行比较 - MySQL uses 0 and 1 for booleans anyways

关于php - 在mysql和PHP中检查一个字段是否有属性 `UNIQUE`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14049407/

相关文章:

Java 索引数组帮助。编码棒

matlab - 根据矩阵指定区域中的逻辑索引更改某些值

python - 多维数组上的 numpy 高级索引

php - PHP 变量查询的一部分

javascript - 悬停时停止 jQuery 加载

php - MySQL:mysqldump 生成数据库备份

php - 添加 Rest API 响应到 MySQL 数据库

mysql - 为选择状态 1 的第一条记录和状态 2 的第二条记录编写查询,依此类推

mysql - 如何从 SQL 子查询返回数组?

PHP,从数组返回值