2008-09-24 36 views

Trả lời

117

Sử dụng SHOW INDEX như vậy:

SHOW INDEX FROM [tablename] 

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

+28

HIỂN THỊ INDEX TỪ 'my_table' WHERE Key_name = 'index_to_check'; – mit

+5

Sử dụng tốt hơn Column_name thay vì Key_name, theo cách này bạn không cần phải tìm ra tên chỉ mục nếu nó được tự động thêm mà không có tên. – Programista

+0

Cách kiểm tra nhiều phím? – berserk

1

để chỉ cần nhìn vào một cách bố trí bảng biểu từ các cli. Bạn sẽ làm

desc mytable

hoặc

chương trình bảng mytable

32

Hãy thử:

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

Nó sẽ cho bạn biết tôi f có chỉ mục thuộc bất kỳ loại nào trên một cột nhất định mà không cần biết tên được chỉ định cho chỉ mục. Nó cũng sẽ làm việc trong một thủ tục lưu trữ (như trái ngược với hiển thị chỉ số)

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

bạn có thể tìm thấy nếu có tồn tại một khóa duy nhất trong bảng

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

Bạn không thể chạy một số chương trình cụ thể truy vấn vì nó sẽ ném một lỗi nếu một chỉ mục không tồn tại. Vì vậy, bạn phải lấy tất cả các chỉ mục vào một mảng và lặp qua chúng nếu bạn muốn tránh bất kỳ lỗi SQL nào.

Heres cách tôi thực hiện. Tôi lấy tất cả các chỉ mục từ bảng (trong trường hợp này là leads) và sau đó, trong vòng lặp foreach, kiểm tra xem tên cột (trong trường hợp này là province) có tồn tại hay không.

$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; 
    } 
} 

Bằng cách này bạn thực sự có thể thu hẹp các thuộc tính chỉ mục. Thực hiện một số print_r của $res để xem bạn có thể làm việc gì.

-1

bạn có thể sử dụng câu lệnh SQL sau để kiểm tra cột nhất định trên bảng được lập chỉ mục hay không

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; 

kể từ khi gia nhập là chống lại INNODB_SYS_ *, vì vậy các chỉ số trận đấu chỉ đến từ chỉ bảng InnoDB

0

Sử dụng các tuyên bố sau: SHOW INDEX TỪ your_table

Và sau đó kiểm tra kết quả cho các lĩnh vực: row [ "Table"], row [ "KEY_NAME"]

Đảm bảo bạn viết "Key_name" chính xác

Các vấn đề liên quan