R Markdown, кусок кода SQL генерирует синтаксическую ошибку

Цель: я пытаюсь скомпилировать документ уценки в R, который включает в себя некоторые фрагменты кода SQL с операторами CREATE TABLE IF NOT EXISTS. Они отправляются в базу данных MySQL на локальном хосте. По сути, они должны служить для инициализации базы данных, и использование Markdown дает мне возможность объяснить структуру этой базы данных.

Проблема. К сожалению, код SQL генерирует синтаксические ошибки [1064] при компиляции в R Markdown. Однако, если я запускаю тот же код SQL в MySQL Workbench, он выполняется правильно. Я считаю, что проблема лежит где-то в цепочке от Knitr - rDBI - RMariaDB - MySQL, хотя я также не могу исключить ошибку пользователя.

Вот мой MWE:

<сильный>1. SQL

В файле SQL/mysqlcode.sql у меня есть этот код:

CREATE TABLE IF NOT EXISTS rt_states (
    stateId INT AUTO_INCREMENT NOT NULL, 
    stateName VARCHAR(32) NOT NULL, 
    PRIMARY KEY (stateId)
);

CREATE TABLE IF NOT EXISTS rt_counties (
    countyId INT AUTO_INCREMENT NOT NULL, 
    countyName VARCHAR(75), 
    stateId INT, 
    PRIMARY KEY (countyId), 
        FOREIGN KEY (stateId) 
        REFERENCES rt_states (stateId) 
        ON DELETE RESTRICT ON UPDATE CASCADE
);

<сильный>2. R Уценка

```{r dbconn}

library(DBI)
library(RMariaDB)
library(here)  

db <- DBI::dbConnect(
  drv = RMariaDB::MariaDB(),
  dbname = "my_db",
  host = "localhost",
  username = "my_username",
  password = "my_password"
)

knitr::opts_chunk$set(connection = "db")

```

```{sql my_sql_chunk, code = readLines(here("SQL/mysqlcode.sql"))}
```

Что бы это ни стоило, я получил эти синтаксические ошибки, пытаясь выполнить код с интеграцией SQL RStudio.

Редактировать. Вот ошибка SQL:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ rt_counties (countyId INTO AUTO_INCREMENT NOT NUL» в строке 7 [1064]


person Blake    schedule 06.01.2020    source источник


Ответы (1)


Допускается только одно утверждение за раз.

person Rick James    schedule 15.01.2020
comment
Да, я вижу это сейчас. Это чтобы избежать инъекции SQL. Я должен был увидеть это перед публикацией. Спасибо за ответ! - person Blake; 18.01.2020