significa - Compruebe si un campo tiene la propiedad `UNIQUE` en mysql y PHP
unique index mysql que significa (3)
Ok, lo encontré gracias a @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;
}
¿Cómo puedo verificar si un campo de una tabla está establecido como ÚNICO ?
Por ejemplo, tengo una tabla llamada users
con un email
campo establecido como UNIQUE
y una picture
campo no establecida como UNIQUE
, quiero antes de seleccionar comprobar si el campo está establecido como UNIQUE
si no, entonces no hago el SELECT
.
Traté de SELECT
luego contar el número devuelto de la fila, si es más de 1, entonces no es UNIQUE
,
"SELECT * FROM table WHERE email=''$email''"
//...some mysql php line later
if($count > 1){
//return nothing
}
pero no es eficiente, ¿y si no hay duplicados?
¿Cuál es la mejor manera de verificar si un campo está configurado como UNIQUE
en PHP
?
Editar: no duplicado no significa que tiene propiedad UNIQUE
Puede verificar toda la columna indexada con
si hay un índice ÚNICO, entonces no puede ser el valor duplicado en la misma tabla PERO un índice UNICO permite múltiples valores NULOS para las columnas que pueden contener NULO
actualizar
para crear una restricción ÚNICA en una columna (dejar el correo electrónico) use debajo de la consulta
ALTER TABLE `table_name` ADD UNIQUE (`email`);
De la documentación de SHOW INDEX (encontrado por @diEcho):
SHOW INDEX devuelve los siguientes campos:
Non_unique: 0 si el índice no puede contener duplicados, 1 si puede.
Column_name - El nombre de la columna.
Tratar:
SHOW INDEXES
FROM $tablename
WHERE Column_name=''$field''
AND NOT Non_unique
Tenga en cuenta que esto supone que no existe un índice ÚNICO que abarque varias columnas. Si puede existir, entonces puede excluirlos con una subconsulta.
También tenga en cuenta que los índices desactivados también se muestran en esta consulta (la posibilidad de índices desactivados se menciona en la documentación en la columna Comment
). No parece haber una columna que lo refleje, por lo que es posible que deba analizar la columna Comment
si ha deshabilitado los índices.
No hay necesidad de comparar Non_unique
a un número - MySQL usa 0 y 1 para booleanos de todos modos