PROCEDURE ANALYSE() – это процедура MySQL, которая исследует запрос и предлагает оптимальные типы данных для каждой колонки, участвующей в запросе. Процедура работает во всех версиях MySQL, начиная с третьей.
Синтаксис:
SELECT … FROM … WHERE … PROCEDURE ANALYSE([max_elements,[max_memory]])
При вызове процедуры, весь результат запроса переписывается и возвращаются следующие данные:
mysql> SELECT user_login, user_pass FROM wp_users WHERE ID=1 PROCEDURE ANALYSE();
+------------------------+------------------------------------+------------------------------------+------------+------------+------------------+-------+-------------------------+------+-----------------------------------------------------+
| Field_name | Min_value | Max_value | Min_length | Max_length | Empties_or_zeros | Nulls | Avg_value_or_avg_length | Std | Optimal_fieldtype |
+------------------------+------------------------------------+------------------------------------+------------+------------+------------------+-------+-------------------------+------+-----------------------------------------------------+
| wp.wp_users.user_login | admin | admin | 5 | 5 | 0 | 0 | 5.0000 | NULL | ENUM('admin') NOT NULL |
| wp.wp_users.user_pass | $P$BRxeOjv1sgBVgV82vO524AqG/5EdDD0 | $P$BRxeOjv1sgBVgV82vO524AqG/5EdDD0 | 34 | 34 | 0 | 0 | 34.0000 | NULL | ENUM('$P$BRxeOjv1sgBVgV82vO524AqG/5EdDD0') NOT NULL |
+------------------------+------------------------------------+------------------------------------+------------+------------+------------------+-------+-------------------------+------+-----------------------------------------------------+
2 rows in set (0.00 sec)
Ни один из аргументов PROCEDURE ANALYSE() не позволяет использовать подзапросы внутри них, однако процедуру можно использовать в SQL-инъекциях для получения имен колонок, которые участвуют в выборке, таблицы и текущей базы данных. Особенно это актуально для MySQL версии 4, где нет системной базы данных information_schema, хранящей информацию о всех БД, таблицах и их колонках. Read more »