【问题标题】:Create Table with schema and data from old table使用旧表中的架构和数据创建表
【发布时间】:2020-09-24 00:39:55
【问题描述】:

我正在编写一个脚本,其目的是:根据包含后缀日期时间的旧表设置表名(例如 table_1_2020_01_01,根据旧表的模式为该表创建一个模式,然后将数据插入到该表中旧表中的表。

我创建了三个 MySQL 语句,用于设置表名,创建表,然后将数据插入到创建的表中:

SET @TABLE_NAME = CONCAT(DATE_FORMAT(NOW(), '%Y_%m_%d'), '_new_table');

SET @SQL = CONCAT('CREATE TABLE IF NOT EXISTS', @TABLE_NAME, 'LIKE old_table');
                            PREPARE stmt FROM @SQL;
                            EXECUTE stmt;
                            DEALLOCATE PREPARE stmt;

SET @SQL = CONCAT('INSERT INTO', @TABLE_NAME, 'SELECT * FROM old_table WHERE id = ?');
                            PREPARE stmt FROM @SQL;
                            EXECUTE stmt USING @id;
                            DEALLOCATE PREPARE stmt;

但是,每次我从 main 运行我的 run my func 时,我都会收到此错误:

panic: Error 1064: 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 'PREPARE stmt FROM @SQL;
                                                        EXECUTE stmt;
                                                        DEALLOCATE PREPARE stmt' at line

我在 golang 中发现 Set Table name as a var。所以我的解决方案是使用准备好的语句并将 var 传递给准备好的语句。

可能是这样的:

stmt, err := tx.Prepare("CREATE TABLE (?) ...")
if err != nil {
    log.Fatal(err)
} 
defer stmt.Close() // danger!
_, err = stmt.Exec(tableNameVariable)

有没有办法可以使用 _, err = db.Exec( 来运行上述查询,或者有更好的方法吗?

【问题讨论】:

    标签: go


    【解决方案1】:

    您可以使用 GORM 库与您的数据库进行交互。 GORM 是一个 SQL“构建器”,它还允许您编写直接查询来编辑数据库。

    https://gorm.io/docs/

    https://gorm.io/docs/sql_builder.html

    另外,gorm 支持 MySQL。

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多