我试图删除一个表并使用以下代码变体截断它。以下所有版本都给出了同样的错误。
代码: 把“清理数据库表:program_slots” ProgramSlot.destroy_all ActiveRecord :: Base.connection.execute(“TRUNCATE TABLE program_slots”)
puts "Clearing Database Table: program_slots"
ProgramSlot.destroy_all
ActiveRecord::Base.connection.execute("TRUNCATE TABLE PROGRAMSLOTS")
puts "Clearing Database Table: program_slots"
ProgramSlot.destroy_all
ActiveRecord::Base.connection.execute("TRUNCATE TABLE 'program_slots'")
puts "Clearing Database Table: program_slots"
ProgramSlot.destroy_all
ActiveRecord::Base.connection.execute("TRUNCATE TABLE PROGRAM_SLOTS")
表名是 program_slots
我得到的错误是:
>> ProgramSlot Load (0.6ms) SELECT `program_slots`.* FROM `program_slots`
(0.8ms) TRUNCATE TABLE PROGRAMSLOTS
Mysql2::Error: Table 'dd_development.programslots' doesn't exist: TRUNCATE TABLE PROGRAMSLOTS
什么是正确的语法?似乎我在执行语句中放置的下划线没有经过.......注意错误语句试图找到一个名为“programslots”的表,但真正的表名是“program_slots”。
我该如何解决这个问题?
答案 0 :(得分:0)
MySQL表名称区分大小写,因此#1和#3失败。如果你要使用引号,那么你需要为MySQL使用正确的引号,这就是#2失败的原因。我不知道为什么会这样:
ActiveRecord::Base.connection.execute("TRUNCATE TABLE program_slots")
无效。如果没有,您可以使用:
ActiveRecord::Base.connection.execute("TRUNCATE TABLE `program_slots`")
注意有角度的单引号。