package function import ( "fmt" "github.com/jmoiron/sqlx" ) // ExecuteDDL 执行DDL语句(创建、删除、更新表等) func ExecuteDDL(db *sqlx.DB, ddlSQL string) error { if ddlSQL == "" { return fmt.Errorf("DDL SQL statement is empty") } // 执行DDL语句 _, err := db.Exec(ddlSQL) if err != nil { return fmt.Errorf("failed to execute DDL: %v", err) } return nil } // ExecuteDDLWithTx 在事务中执行DDL语句 func ExecuteDDLWithTx(db *sqlx.DB, ddlSQL string) error { if ddlSQL == "" { return fmt.Errorf("DDL SQL statement is empty") } // 开始事务 tx, err := db.Begin() if err != nil { return fmt.Errorf("failed to begin transaction: %v", err) } // 执行DDL语句 _, err = tx.Exec(ddlSQL) if err != nil { // 回滚事务 tx.Rollback() return fmt.Errorf("failed to execute DDL in transaction: %v", err) } // 提交事务 if err := tx.Commit(); err != nil { return fmt.Errorf("failed to commit transaction: %v", err) } return nil } // ExecuteMultipleDDL 执行多个DDL语句 func ExecuteMultipleDDL(db *sqlx.DB, ddlSQLs []string) error { if len(ddlSQLs) == 0 { return fmt.Errorf("DDL SQL statements are empty") } // 开始事务 tx, err := db.Begin() if err != nil { return fmt.Errorf("failed to begin transaction: %v", err) } // 依次执行所有DDL语句 for i, ddlSQL := range ddlSQLs { if ddlSQL == "" { tx.Rollback() return fmt.Errorf("DDL SQL statement at index %d is empty", i) } _, err = tx.Exec(ddlSQL) if err != nil { tx.Rollback() return fmt.Errorf("failed to execute DDL at index %d: %v", i, err) } } // 提交事务 if err := tx.Commit(); err != nil { return fmt.Errorf("failed to commit transaction: %v", err) } return nil }