Код: Выделить всё
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXIST abc();
SELECT( IF( ( SELECT 1 FROM information_schema.statistics WHERE index_name = 'abc_x' AND table_name = 'abc' ) > 0, SELECT 0, CREATE UNIQUE INDEX abc_x ON abc()));
Означает ли это, что я не могу выполнить SELECT до фиксации оператора CREATE, поскольку таблица еще не видна? Или происходит что-то еще?
Использование собственного соединителя MySQL и MySQL версии 8.0.
РЕДАКТИРОВАТЬ:
Позвольте мне дать больше контекста:
Мой фактический код выглядит примерно так:
Код: Выделить всё
std::vector queries;
queries.push_back( L"CREATE TABLE IF NOT EXIST abc(...);" );
queries.push_back( L"CREATE TABLE IF NOT EXIST def(...);" );
queries.push_back( L"SELECT( IF( ( SELECT 1 FROM information_schema.statistics WHERE index_name = 'abc_x' AND table_name = 'abc' ) > 0, SELECT 0, CREATE UNIQUE INDEX abc_x ON abc()));" );
На самом деле существует гораздо больше команд создания таблицы/индекса, а затем некоторые таблицы заполняются.
Проблема в том, что при попытке создать индекс для таблицы я получаю указанную выше ошибку.
Все это должно работать, и я просто не понимаю, почему это не удается.
/>Он работает в SQL Server и PostgreSQL, но не в MySQL.
Код в EDIT запускается внутри приложения C++. Поэтому использование SP в качестве ответа на связанный вопрос бесполезно.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-commit
Мобильная версия