2008-09-24 14 views

Antwort

117

Verwenden SHOW INDEX wie so:

SHOW INDEX FROM [tablename] 

Docs: https://dev.mysql.com/doc/refman/5.0/en/show-index.html

+28

SHOW INDEX FROM 'my_table' WHERE Schlüsselname = 'index_to_check'; – mit

+5

Bessere Verwendung von Column_name anstelle von Key_name. Auf diese Weise müssen Sie den Indexnamen nicht ermitteln, wenn er automatisch ohne Namen hinzugefügt wird. – Programista

+0

Wie überprüft man mehrere Schlüssel? – berserk

1

auf der cli in einem Tabellen-Layout anschauen. würden Sie

tun

ab Mytable

oder

zeigen Tabelle mytable

32

Versuchen:

SELECT * FROM information_schema.statistics 
    WHERE table_schema = [DATABASE NAME] 
    AND table_name = [TABLE NAME] AND column_name = [COLUMN NAME] 

Es wird Ihnen sagen, i f Es gibt einen Index jeder Art in einer bestimmten Spalte, ohne dass der Name des Indexes bekannt sein muss. Es wird auch in einer gespeicherten Prozedur arbeiten (im Gegensatz Index zeigen)

9
SHOW KEYS FROM tablename WHERE Key_name='unique key name' 

Sie finden können, wenn es einen eindeutigen Schlüssel in der Tabelle

6
show index from table_name where Column_name='column_name'; 
-2

existiert Sie keine bestimmte Show Index laufen Abfrage, weil es einen Fehler wirft, wenn ein Index nicht existiert. Daher müssen Sie alle Indizes in ein Array aufnehmen und diese durchlaufen, wenn Sie SQL-Fehler vermeiden möchten.

Heres, wie ich es mache. Ich nehme alle Indizes aus der Tabelle (in diesem Fall leads) und überprüfe dann in einer foreach-Schleife, ob der Spaltenname (in diesem Fall province) existiert oder nicht.

$this->name = 'province'; 

$stm = $this->db->prepare('show index from `leads`'); 
$stm->execute(); 
$res = $stm->fetchAll(); 
$index_exists = false; 

foreach ($res as $r) { 
    if ($r['Column_name'] == $this->name) { 
     $index_exists = true; 
    } 
} 

Auf diese Weise können Sie die Indexattribute wirklich eingrenzen. Machen Sie eine print_r von $res, um zu sehen, mit was Sie arbeiten können.

-1

können Sie die folgende SQL-Anweisung verwenden, um die gegebenen Spalte auf Tabelle indiziert wurde zu prüfen oder nicht

select a.table_schema, a.table_name, a.column_name, index_name 
from information_schema.columns a 
join information_schema.tables b on a.table_schema = b.table_schema and 
            a.table_name = b.table_name and 
            b.table_type = 'BASE TABLE' 
left join (
select  concat(x.name, '/', y.name) full_path_schema, y.name index_name 
FROM information_schema.INNODB_SYS_TABLES as x 
JOIN information_schema.INNODB_SYS_INDEXES as y on x.TABLE_ID = y.TABLE_ID 
WHERE x.name = 'your_schema' 
and y.name = 'your_column') d on concat(a.table_schema, '/', a.table_name, '/', a.column_name) = d.full_path_schema 
where a.table_schema = 'your_schema' 
and  a.column_name = 'your_column' 
order by a.table_schema, a.table_name; 

da die sind gegen INNODB_SYS_ * verbindet, so dass die Spiel-Indizes kamen nur aus InnoDB-Tabellen nur

0

Verwenden Sie die folgende Anweisung: SHOW INDEX FROM your_table

Und dann überprüfen Sie das Ergebnis für die Felder: row [ "Table"], row [ "Key_name"]

Stellen Sie sicher, dass Sie "Key_name" richtig schreiben

Verwandte Themen