MySQL es un sistema de gestión de bases de datos relacionales de código abierto basado en el lenguaje de consulta estructurado (SQL). Es una base de datos relacional que organiza los datos en una o más tablas en las que los datos se relacionan entre sí.
Controlador de base de datos: un controlador de base de datos implementa un protocolo para una conexión de base de datos. El Driver es como un adaptador que se conecta a una interfaz genérica a una base de datos específica.
Configuración inicial:
Inicie el servidor MySQL e instale el controlador go MySQL con el siguiente comando.
go get -u github.com/go-sql-driver/mysql
Creando objeto de base de datos:
Cree un objeto de base de datos con sql.Open. En cambio, no se establece una conexión con MySQL, solo crea un objeto de base de datos que se puede usar más adelante.
db, err := sql.Open("mysql", "<user>:<password>@tcp(127.0.0.1:3306)/<database-name>")
Reemplace 3306 si no usa MySQL en el puerto predeterminado.
Go
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { // create a database object which can be used // to connect with database. db, err := sql.Open("mysql", "root:passwd@tcp(0.0.0.0:3306)/user") // handle error, if any. if err != nil { panic(err) } // Now its time to connect with oru database, // database object has a method Ping. // Ping returns error, if unable connect to database. err = db.Ping() // handle error if err != nil { panic(err) } fmt.Print("Pong\n") // database object has a method Close, // which is used to free the resource. // Free the resource when the function // is returned. defer db.Close() }
Producción:
Ejecutar consulta de base de datos: se puede realizar una consulta de base de datos con Exec() y Query().
1. Creación de una tabla de base de datos con consulta SQL y Exec().
Go
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { // create a database object which can be used // to connect with database. db, err := sql.Open("mysql", "root:passwd@tcp(0.0.0.0:3306)/user") // handle error, if any. if err != nil { panic(err) } // database object has a method called Exec, // it executes a database query, but it does // not return any row as result. // Here we create a database table with a SQL query. _, err = db.Exec("CREATE TABLE user(id INT NOT NULL, name VARCHAR(20), PRIMARY KEY (ID));") // handle error if err != nil { panic(err) } fmt.Print("Successfully Created\n") // database object has a method Close, // which is used to free the resource. // Free the resource when the function // is returned. defer db.Close() }
Producción:
2. Insertar una fila en la tabla de la base de datos con consulta SQL en Query().
Go
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { // create a database object which can be used // to connect with database. db, err := sql.Open("mysql", "root:passwd@tcp(0.0.0.0:3306)/user") // handle error, if any. if err != nil { panic(err) } // database object has a method called Query, // It can execute a SQL query and return rows // as result. Here we insert a row into the table, // no row returned as result for this operation. _, err = db.Query("INSERT INTO user VALUES(1,'sam')") // handle error if err != nil { panic(err) } fmt.Print("Successfully Inserted\n") // database object has a method Close, // which is used to free the resource. // Free the resource when the function // is returned. defer db.Close() }
Producción:
3. Usar la consulta SQL en Query() para devolver todas las filas de la tabla de usuarios.
Go
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { // create a database object which can be // used to connect with database. db, err := sql.Open("mysql", "root:passwd@tcp(0.0.0.0:3306)/user") // handle error, if any. if err != nil { panic(err) } // Here a SQL query is used to return all // the data from the table user. result, err := db.Query("SELECT * FROM user") // handle error if err != nil { panic(err) } // the result object has a method called Next, // which is used to iterate through all returned rows. for result.Next() { var id int var name string // The result object provided Scan method // to read row data, Scan returns error, // if any. Here we read id and name returned. err = result.Scan(&id, &name) // handle error if err != nil { panic(err) } fmt.Printf("Id: %d Name: %s\n", id, name) } // database object has a method Close, // which is used to free the resource. // Free the resource when the function // is returned. defer db.Close() }
Producción: