在使用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适配器没有相同的限制。