Я пытаюсь проиндексировать существующую (и заполненную) таблицу в MySQL как часть сценария ETL в PHP. У меня есть два заявления индекса (позвоните create_index.sql
):
create index my_index_1 on my_table (my_col_1);
create fulltext index my_index_2 on my_table (my_col_2 asc, my_col_3 asc);
Это автоматизировано с помощью PHP, запускается после заполнения путем загрузки SQL (текстового) файла и выполнения его в виде пакета:
$conn = new mysqli('my_host', 'my_user', 'my_pass', 'my_db');
$result = $conn->query(file_get_contents('create_index.sql');
if (false === $result)
error_log($conn->error);
При выполнении, как указано выше (через PHP), я получаю стандартное сообщение «В вашем синтаксисе SQL есть ошибка».
При выполнении в MySQL Workbench два create index
Заявления, точно такие же, выполняются без ошибок.
Может ли кто-то указать мне на то, что GUI делает по-разному, между утверждениями, которые я предполагаю, что приводит к разным результатам для одних и тех же утверждений? Я лаю не на том дереве?
Вам нужно выполнить каждую инструкцию SQL в файле отдельно. Разделение утверждений может быть более элегантным, но в зависимости от того, что вы показываете в своем вопросе, это должно сработать:
$conn = new mysqli('my_host', 'my_user', 'my_pass', 'my_db');
$sql_file_text = file_get_contents('create_index.sql');
$sql = explode(';',$sql_file_text);
foreach($sql as $key => $sql_statement) {
if($sql_statement != '') {
$result = $conn->query($sql_statement);
if (false === $result) {
error_log($conn->error);
}
}
}
Других решений пока нет …