小编典典

在执行块中具有多个SQL语句的Rails和MySQL语法错误

sql

在使用MySQL的应用程序的Rails迁移中,我具有以下代码:

execute <<-SQL
  ALTER TABLE properties
    ADD name VARCHAR(255) NOT NULL;

  ALTER TABLE properties
    ADD CONSTRAINT fk_properties_name
    FOREIGN KEY (name)
    REFERENCES valid_property_names (property_name);
SQL

运行迁移时,出现以下错误:

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALTER TABLE properties

为什么会出现此错误,我该如何解决?


阅读 124

收藏
2021-04-22

共1个答案

小编典典

这里的问题是,当同一执行块中有多个SQL命令时,Rails Mysql2数据库适配器就会阻塞。以下将正常运行:

execute <<-SQL
  ALTER TABLE properties
    ADD name VARCHAR(255) NOT NULL;
SQL
execute <<-SQL
  ALTER TABLE properties
    ADD CONSTRAINT fk_properties_name
    FOREIGN KEY (name)
    REFERENCES valid_property_names (property_name);
SQL

如果您是将PostgreSQL与Rails一起使用,则此行为可能会使您感到困惑,因为Postgres适配器没有相同的限制。

2021-04-22