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