数据库
首页 > 数据库> > Rails和MySQL语法错误与执行块中的多个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

为什么我会收到此错误,如何解决?

解决方法:

这里的问题是当同一个执行块中有多个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适配器没有相同的限制.

标签:sql,ruby-on-rails,mysql,rails-migrations
来源: https://codeday.me/bug/20190728/1562213.html