Если я правильно понимаю, вы хотите использовать хеш в качестве первичного ключа:
INSERT INTO MyTable (pk) VALUES (MD5('plain-value'));
Затем вы хотите получить его по хешу, не зная, каков его хэш-дайджест:
SELECT * FROM MyTable WHERE pk = MD5('plain-value');
Каким-то образом это должно обеспечить большую безопасность в случае, если люди украдут резервную копию вашей базы данных и PHP-код?Ну, это не так.Если я знаю исходное простое значение и метод хэширования, я могу найти данные так же легко, как если бы вы не хэшировали значение.
Я согласен с комментарием @scunliffe - мы не уверены, какую именно проблему вы пытаетесь решить, но похоже, что этот метод не решит ее.
Это такженеэффективно использовать хэш-дайджест MD5 в качестве первичного ключа.Вы должны хранить его в CHAR (32) или UNHEX и хранить в BINARY (16).В любом случае, вы не можете использовать INT или даже BIGINT в качестве типа данных первичного ключа.Значения ключей являются более громоздкими и, следовательно, создают большие индексы.
Кроме того, новые строки будут вставляться в произвольном месте в кластеризованном индексе.Это дороже, чем добавление новых значений в конец B-дерева, как вы сделали бы, если бы использовали простые автоинкрементные целые числа, как и все остальные.