繁体   English   中英

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

[英]Check whether a field has the property `UNIQUE` in mysql and PHP

如何检查表中的字段是否设置为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属性

SHOW INDEX (由@diEcho找到)的文档中

SHOW INDEX返回以下字段:

Non_unique-如果索引不能包含重复项,则为0;如果可以,则为1。

Column_name-列名。

尝试:

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

请注意,这假定不存在跨越多列的UNIQUE索引。 如果可以,那么您可能希望通过子查询排除这些。

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

无需将Non_unique与数字进行比较- 无论如何,MySQL使用0和1表示布尔值

您可以使用以下命令检查所有索引列

SHOW INDEX

如果有一个UNIQUE索引,则它不能在同一表中重复值,但一个UNIQUE索引允许包含NULL的列具有多个NULL值

更新

在列上创建UNIQUE约束(让电子邮件发送),使用以下查询

  ALTER TABLE  `table_name` ADD UNIQUE (`email`);

好的,我感谢@diEcho

public function isUniqueField($tablename, $field, $connection){
        $query = $connection->query("SHOW INDEXES FROM $tablename WHERE Column_name='$field' AND Non_unique=0");
        $query->execute();
        if(!$query->fetchAll()){
            return false;
        }
        return true;
    }

它是葡萄牙语的屏幕截图,但是您有个主意。 phpmyadmin上 ,如果选择数据库,然后转到“ 结构”选项卡 ,则会在列索引附近看到一个钥匙图标

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM