Intentaré explicar todos los apuntes que tengo sobre temas de software (Ubuntu, Windows, Blogger, Dynamics NAV...) y noticias que me llamen la atención.
Mostrando entradas con la etiqueta MySQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta MySQL. Mostrar todas las entradas
Como convertir System.Type (Datos .NET) to Data.DbType (datos SQL)
Cuando trabajas con bases de datos SQL en .NET es útil tener una función que convierta los entre los diferentes tipos de .NET y SQL. Aquí les dejo dos posibles soluciones.
Con esta otra función estamos establecemos las equivalencias entre los posibles valores que puedan tener .NET y le damos su equivalencia en SQL.
Control del flujo en procedimientos almacenados en MySQL
Antes de empezar con las instrucciones propias para el control del flujo, vale la pena indicar el uso de las variables dentro de los procedimientos.
DECLARE nombre_variable tipe [DEFAULT valor]Este comando se usa para declarar variables locales. Para proporcionar un valor por defecto para la variable, se incluye la cláusula DEFAULT. El valor puede especificarse como una expresión, es decir, no necesita ser una constante. Si no se indica la cláusula DEFAULT, el valor inicial será NULL. Una variable local sólo es visible dentro del bloque BEGIN ... END donde está declarada.Para cambiar el valor de una variable se usa SET de este modo:
SET nombre_variable = expresionY para terminar este rápido repaso, recordar también que para poder acceder a una variable local a la finalización de un procedimiento se tiene que usar los parámetros de salida.Bueno y ahora a lo que quería explicar:
IF condicion THEN sentencia
[ELSEIF condicion THEN sentencia]
[ELSE sentencia]
END IF
Ejemplo: > DELIMITER //
> CREATE PROCEDURE miProcedimiento(IN p1 INT)
> BEGIN
> DECLARE miVariable INT;
> SET miVariable = p1 * 2;
> IF miVariable = 2 THEN
> INSERT INTO lista VALUES(22);
> ELSEIFmiVariable = 4 THEN
> INSERT INTO lista VALUES(4444);
> ELSE
> INSERT INTO lista VALUES(1);
> END IF;
> END;
> //
CASE valor
WHEN cuando_el_valor THEN sentencia
[WHEN cuando_el_valor THEN sentencia]
[ELSE sentencia]
END CASE
oCASE
WHEN condicion THEN sentencia
[WHEN condicion THEN sentencia]
[ELSE sentencia]
END CASE
Ejemplo:> DELIMITER //
> CREATE PROCEDURE miProcedimiento(IN p1 INT)
> BEGIN
> DECLARE miVariable INT;
> SET miVariable = p1 * 2;
> CASE miVariable
> WHEN 2 THENINSERT INTO lista VALUES(22);
>WHEN 4 THENINSERT INTO lista VALUES(4444);
> ELSEINSERT INTO lista VALUES(1);
> END CASE;
> END;
> //
REPEAT
sentencia
UNTIL condicion
END REPEATEjemplo:> DELIMITER //
> CREATE PROCEDURE miProcedimiento()
> BEGIN
> DECLARE miVariable INT;
> SET miVariable = 1;
> REPEAT
>INSERT INTO lista VALUES(miVariable);
>SET miVariable = miVariable + 1;
> UNTIL v >= 5;
> END REPEAT;
> END;
> //
WHILE condicion DO
sentencia
END WHILEEjemplo:> DELIMITER //
> CREATE PROCEDURE miProcedimiento()
> BEGIN
> DECLARE miVariable INT;
> SET miVariable = 1;
> WHILEv >= 5 DO
>INSERT INTO lista VALUES(miVariable);
>SET miVariable = miVariable + 1;
> END WHILE;
> END;
> //
[Etiqueta:] LOOP
sentencia
END LOOP [Etiqueta]
Ejemplo:> DELIMITER //
> CREATE PROCEDURE miProcedimiento()
> BEGIN
> DECLARE miVariable INT;
> SET miVariable = 1;
> loop_label : LOOP
>INSERT INTO lista VALUES(miVariable);
>SET miVariable = miVariable + 1;
> IF v >= 5 THEN
> LEAVE loop_label;
> END IF;
> END LOOP;
> END;
> //
Transacciones en MySQL
Las transacciones son un conjunto de instrucciones SQL que tienen la cualidad de ejecutarse como una unidad, es decir, o se ejecutan todas o no se ejecuta ninguna. Si una transacción tiene éxito, todas las modificaciones de los datos realizados durante la transacción se guardan en la base de datos. Si una transacción contiene errores los cambios no se guardaran en la base de datos.
En un sistema ideal, las transacciones deberían garantizar todas las propiedades ACID (en la práctica, a veces alguna de estas propiedades se simplifica o debilita con vistas a obtener un mejor rendimiento).
ACID son las siglas de Atomicity, Consistency, Isolation y Durability (Atomicidad, Consistencia, Aislamiento , Durabilidad)
Para implementar transacciones en MySQL hay que utilizar la versión 5.0.x y el motor de almacenamiento InnoDB.
Una transacción tiene dos finales posibles, COMMIT (se ejecutan todas las instrucciones y guardamos los datos) y ROLLBACK (se produce un error y no se guardan los cambios). Por defecto, MySQL trae activado el modo autocommit, por lo que cuando se realiza una transacción (INSERT, UPDATE o DELETE) esta se confirma automáticamente. Para desactivar esta opción se debe ejecutar el siguiente comando (no recomendado):
Hay que tener en cuenta que al realizar una transacción SQL que cuando se realice un INSERT, UPDATE o DELETE se generará un bloqueo sobre la tabla y que otros clientes no pueden acceder esta para escribir. Pero si podrán realizar lecturas, en las que no podrán ver los datos del primer cliente hasta que los mismos sean confirmados.
En un sistema ideal, las transacciones deberían garantizar todas las propiedades ACID (en la práctica, a veces alguna de estas propiedades se simplifica o debilita con vistas a obtener un mejor rendimiento).
ACID son las siglas de Atomicity, Consistency, Isolation y Durability (Atomicidad, Consistencia, Aislamiento , Durabilidad)
- Atomicidad. Es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.
- Consistencia. Esta propiedad esta ligada a la integridad referencial, es decir solo se pueden escribir datos válidos respetando los tipos de datos declarados y la integridad referencial.
- Aislamiento. Asegura que una operación no puede afectar a otras. Con esto se asegura que varias transacciones sobre la misma información sean independientes y no generen ningún tipo de error.
- Durabilidad. Cuando se completa una transacción con éxito los cambios se vuelven permanentes.
Para implementar transacciones en MySQL hay que utilizar la versión 5.0.x y el motor de almacenamiento InnoDB.
Una transacción tiene dos finales posibles, COMMIT (se ejecutan todas las instrucciones y guardamos los datos) y ROLLBACK (se produce un error y no se guardan los cambios). Por defecto, MySQL trae activado el modo autocommit, por lo que cuando se realiza una transacción (INSERT, UPDATE o DELETE) esta se confirma automáticamente. Para desactivar esta opción se debe ejecutar el siguiente comando (no recomendado):
> SET AUTOCOMMIT=0;
o también se puede desactivar para una serie de comandos utilizando START TRANSACTION. (Esto es lo recomendado)
> START TRANSACTION;
> .....
> COMMIT;
Hay que tener en cuenta que al realizar una transacción SQL que cuando se realice un INSERT, UPDATE o DELETE se generará un bloqueo sobre la tabla y que otros clientes no pueden acceder esta para escribir. Pero si podrán realizar lecturas, en las que no podrán ver los datos del primer cliente hasta que los mismos sean confirmados.
Procedimientos almacenados en MySQL
Un procedimiento almacenado es un programa que se guarda físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. Este programa esta hecho con un lenguaje propio de cada Gestor de BD y esta compilado, por lo que la velocidad de ejecución es muy rápida.
Las principales ventajas son:
Bueno dejemos la teoría y vayamos a la práctica este es el ejemplo de un procedimiento almacenado:
Este procedimiento almacenado recibe los parámatros de nombre y número de plazas y en función de las plazas del vehículo inserta los datos en la tabla coche o monovolumen. Es una función bien tonta, lo sé, incluso podría ser más lenta como procedimiento almacenado que como código en nuestro programa. Pero es simplemente un ejemplo.
Para hacer una llamada al procedimiento almacenado basta con usar la sentencia call:
Las principales ventajas son:
- El S.G.B.D. es capaz de trabajar más rápido con los datos que cualquier programa externo, ya que posee acceso directo a los datos a manipular y sólo necesita enviar el resultado final al usuario.
- Sólo realizamos una conexión al servidor y este ya es capaz de realizar todas las comprobaciones sin tener que volver a establecer una conexión.
- Podemos reutilizar el procedimiento y este puede ser llamado desde diferentes aplicaciones y lenguajes. Sólo lo programaremos una vez.
Bueno dejemos la teoría y vayamos a la práctica este es el ejemplo de un procedimiento almacenado:
> DELIMITER //
> CREATE PROCEDURE addAutomovil(IN nombre VARCHAR(50),IN plazas INT)
> BEGIN
> IF plazas < 6 THEN
>INSERT INTO coche VALUES(nombre,plazas);
>ELSE
>INSERT INTO monovolumen VALUES(nombre,plazas);
>END IF;
>END;
>//
Este procedimiento almacenado recibe los parámatros de nombre y número de plazas y en función de las plazas del vehículo inserta los datos en la tabla coche o monovolumen. Es una función bien tonta, lo sé, incluso podría ser más lenta como procedimiento almacenado que como código en nuestro programa. Pero es simplemente un ejemplo.
Para hacer una llamada al procedimiento almacenado basta con usar la sentencia call:
> CALL addAutomovil("Nissan Serena",8);
De ahora en adelante, usaremos siempre este procedimiento para introducir automóviles en la B.D. de forma que si un día se debe modificar sólo deberemos corregir el procedimiento.
Optimización de índices en MySQL
Normalmente la primera opción para la optimización de una base de datos en MySQL (y en la mayoría de bases de datos) consiste en la optimización de los índices.
Aquí os dejo una serie de consejos para la creación de índices:
- Indexar sólo las columnas necesarias: sólo se deben indexar las columnas sobre las que se realizan búsquedas, es decir, aquellas que se utilizan en una cláusula WHERE o en una JOIN.
- No abusar de los índices: los índices deben ser actualizados, y mantenidos cuando se realizan INSERT's, UPDATE's y DELETE's, por lo que ralentiza el sistema. Es decir, más índices más lento. Sólo hay que crear los necesarios.
- Utilizar índices únicos: los índices funcionan mejor sobre columnas con valores únicos y empeoran en columnas que tienen muchos duplicados.
- Utilizar índices cortos: Hay que tener especial cuidado al utilizar índices sobre campos CHAR. Para ello, no es conveniente indexar columnas enteras, si la mayor parte de los valores son únicos dentro de los 10 o 20 primeros caracteres, basta con indexar esa cantidad de caracteres.
- Considerar el tipo de comparaciones a realizar en un registro: los índices se utilizan con los operadores <, <=, =, >=, >, BETWEEN y LIKE, no así con las funciones. Por lo tanto, si se utiliza la función, por ejemplo, STRCMP() para la comparación de cadenas, es innecesaria la creación del índice.
Comandos útiles en MySQL
Existen muchos comandos en MySQL, hoy intentaré hacer un pequeña lista de los más útiles (por lo menos para mí). Por cierto algunos se ejecutan desde la shell de MySQL (mysql>) y otros desde la shell del sistema operativo. A continuación os detallo la lista:
- Administración
$ mysqladmin -u root -h host -p password 'nuevo_password'
$ mysqladmin extended-status
$ mysqladmin status
$ mysqladmin variables
$ mysqladmin version
$ mysqladmin create base_de_datos
$ mysqladmin drop base_de_datos
$ mysqladmin flush-privileges
$ mysqladmin ping
$ mysqladmin reload
$ mysqladmin kill id_proceso, id_proceso...
$ mysqladmin shutdown
- Copias
$ mysql base_de_datos < backup.sql
$ mysqldump base_de_datos [tablas] > backup.sql
$ mysqldump –no-data base_de_datos [tablas] > backup.sql
$ mysqldump –add-drop-table base_de_datos [tablas] > backup.sql
- Sistema, bases de datos y tablas.
mysql> SHOW DATABASES;
mysql> USEbase_de_datos;
mysql> SHOW TABLES;
mysql> SHOW COLUMNS FROM base_de_datos.nombre_de_tabla;
mysql> SHOW VARIABLES;
mysql> SHOW GRANTS FOR usuario@host;
mysql> SHOW PRIVILEGES;
mysql> DESCRIBE nombre_de_tabla;
- Datos
mysql> DROP DATABASE nombre_de_base_de_datos;
mysql> DROP TABLE nombre_de_tabla;
mysql> ALTER TABLE nombre_de_tabla DROP COLUMN nombre_de_columna;
mysql> ALTER TABLE nombre_de_tabla ADD COLUMN nombre_de_columna tipo_de_dato;
mysql> ALTER TABLE TABLE nombre_de_tabla CHANGE nombre_de_columna_original nombre_de_columna_nuevo tipo_de_dato;
mysql> ALTER TABLE nombre_de_tabla MODIFY nombre_de_columna tipo_de_dato;mysql> SELECT * FROM nombre_de_tabla;
mysql> SELECT * FROM nombre_de_tabla WHERE nombre_de_columna = "valor";
mysql> SELECT * FROM nombre_de_tabla WHERE nombre_de_columna_1 = "valor1" AND nombre_de_columna_2_numerica = 'valor2';
mysql> SELECT * FROM nombre_de_tabla WHERE nombre_de_columna_1 != "valor" ORDER BY nombre_de_columna2
mysql> SELECT * FROM nombre_de_tabla WHERE nombre_de_columna LIKE "valor%";
mysql> SELECT DISTINCT nombre_de_columna FROM nombre_de_tabla;
mysql> SELECT nombre_de_columna_1,nombre_de_columna_2 FROM nombre_de_tabla ORDER BY [nombre_de_columna_2] DESC;
mysql> SELECT COUNT(*) FROM nombre_de_tabla;
mysql> SELECT SUM(*) FROM nombre_de_tabla;
MySQL Administrator
MySQL Administrator es un programa client-side disponible multiplataforma que permite conectarnos remotamente a un servidor de bases de datos MySQL y administrarlo. Podremos obtener información de nuestro servidor de bases de datos en tiempo real de las conexiones a la base de datos, tráfico, uso de la conexión, números de consultas, query cache, etc.
Nada mas ejecutar el programa se mostrará una pantalla en la que nos pedirá los datos para conectarnos a la instancia de MySQL. Introducimos los datos y si todo es correcto se mostrará la ventana de MySQL Administrador. En la izquierda se muestra una lista de opciones:
Sin duda es una herramienta muy potente y diría que prácticamente imprescindible (también se puede hacer desde la consola) para mantener el servidor en óptimas condiciones y detectar las causas de por qué este falla.
Nada mas ejecutar el programa se mostrará una pantalla en la que nos pedirá los datos para conectarnos a la instancia de MySQL. Introducimos los datos y si todo es correcto se mostrará la ventana de MySQL Administrador. En la izquierda se muestra una lista de opciones:
- Server Information. Muestra información del servidor y la configuración que de la instancia.
- Service Control. Proporciona información del servicio de MySQL y permite reconfigurarlo.
- Startup Variables. Muestra las opciones para cambiar el estado de las variables de inicio o arranque de nuestro servidor.
- User Administration. Muestra las cuentas de usuario que hay configuradas y nos permite crear nuevas.
- Server Connections. Muestra información sobre las conexiones actuales en el servidor.
- Health. Muestra el comportamiento de nuestro servidor.
- Server Logs. Información de los logs del servidor de MySQL.
- Backup. Para la gestión de copias de seguridad.
- Restore. Para la gestión de recuperación de copias de seguridad.
- Replication Status. Información sobre el estado de replicación del servidor.
- Catalogs. Muestra las bases de datos del servidor de MySQL.
Sin duda es una herramienta muy potente y diría que prácticamente imprescindible (también se puede hacer desde la consola) para mantener el servidor en óptimas condiciones y detectar las causas de por qué este falla.
Diferencias entre campos ENUM y SET en MySQL
El tipo de campo ENUM y SET sirven para determinar los valores que puede tener un campo de una tabla. En ambos determinas la lista de valores que puede contener el campo.
La principal diferencia esta en que un campo de tipo ENUM siempre contendrá un sólo valor de la lista, en cambio en un campo de tipo SET el campo puede contener uno, varios o ningún valor de la lista. Pero hay más características que los diferencian, vamos a verlas.
El tipo de campo ENUM se define de la siguiente forma:
La principal diferencia esta en que un campo de tipo ENUM siempre contendrá un sólo valor de la lista, en cambio en un campo de tipo SET el campo puede contener uno, varios o ningún valor de la lista. Pero hay más características que los diferencian, vamos a verlas.
El tipo de campo ENUM se define de la siguiente forma:
color ENUM('rojo', 'verde', 'azul') NOT NULL DEFAULT 'verde'- Sólo contiene un valor.
- Se puede definir la lista de hasta 65535 valores distintos.
- Si se permite el valor NULL, este será el valor por defecto, en caso contrario, y si no se define con DEFAULT, será el primer valor de la lista (en el ejemplo de arriba, si no defino el DEFAULT ‘verde’, por defecto sería ‘rojo’).
- Cada valor de la lista es numerado con un índice (empieza en el 1), pudiéndose utilizar el índice en lugar del valor de la lista (en el ejemplo de arriba: 1=>’rojo’, 2=>’verde’ y 3=>’azul’).
- En caso de introducir un valor no definido en la lista, el campo pasará a valer '', una cadena vacía, que tiene el índice cero. Y el índice de NULL es NULL.
- Físicamente ocupa 1 byte si hay 255 o menos valores en la lista, o 2 bytes si hay 256 o más valores.
letras SET('a','b','c','d')- Contiene uno, varios o ningún valores
- Se puede definir la lista de hasta 64 valores distintos.
- Físicamente ocupa ocupa 1, 2, 3... u 8 bytes, según la longitud de la lista de valores. Cada valor de la lista representa un bit de la cadena de bits del campo marcandose los valores que contiene el campo, de manera que si todos los bits estan a 1, es que ese campo contiene todos los valores.
- En el ejemplo:
Valores bits‘a’ 00000001‘b’ 00000010‘c’ 00000100‘d’ 00001000'a','c' 00000101
Activar y Desactivar claves foraneas (Foreign Key) en MySQL
MySQL permite trabajar con distintos tipos de motores de almacenamiento (MyIsam, Memory/HEAP, BDB, InnoDB, etc). Para poder trabajar con claves foráneas las tablas deben tener asignado el motor InnoDB.
Las claves foráneas tienen por objetivo establecer una conexión con la clave primaria a la que referencian. Por lo que los valores de una clave foránea deben existir en la clave primaria, o bien ser valores nulos.
A veces es necesario desactivarlas para poder hacer según que operaciones, pero desartivarlas todas una a una es un trabajo engorroso. Para hacerlo de forma masiva las puedes desctivar con el siguiente comando:
Las claves foráneas tienen por objetivo establecer una conexión con la clave primaria a la que referencian. Por lo que los valores de una clave foránea deben existir en la clave primaria, o bien ser valores nulos.
A veces es necesario desactivarlas para poder hacer según que operaciones, pero desartivarlas todas una a una es un trabajo engorroso. Para hacerlo de forma masiva las puedes desctivar con el siguiente comando:
SET FOREIGN_KEY_CHECKS=0;Para activarlas otra vez, ejecuta:SET FOREIGN_KEY_CHECKS=1;También puedes utilizar MySQL Administrator. Para ello, una vez abierto ve a "Backups" y en "Output File Options" marca "Disable keys".Obtener los campos de una tabla en MySQL
Para obtener una lista con los campos de una tabla en MySQL, deberemos ejecutar la siguiente consulta:
USE information_schema;
SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = '<Base de datos>' AND TABLE_NAME = '<Nombre de la tabla>';si tienes instalada la versión 5.0.1 o superior de MySQL también puedes ejecutar:SHOW COLUMNS FROM <Base de datos>.<Nombre de la tabla>;o tambiénSHOW COLUMNS FROM <Nombre de la tabla> FROM <Base de datos>;o tambiénUSE <Base de datos>;
DESCRIBE <Nombre de la tabla>;
Recuperar contraseña en MySQL
Si has perdido la contraseña del root en MySQL sigue leyendo para recuperarla de forma sencilla.
Deten el servicio de MySQL
Deten el servicio de MySQL
$ sudo service mysql stopArranca el servicio, con el parámetro “--skip-grant-tables" para acceder sin que se usen privilegios, permitiéndonos acceder a cualquier base de datos.$ sudo mysqld_safe --skip-grant-tables &Cuando termine de arrancar, nos conectaremos sin indicar la contraseña.$ sudo mysqld -u rootAccedemos a la base de datos de configuraciones, actualizamos la tabla de los usuarios con el nuevo password y refrescamos los permisos.USE mysql;
UPDATE USER SET password=PASSWORD("nuevo_password") WHERE user='root';
FLUSH PRIVILEGES;Salimos del cliente.QUIT;Reiniciamos el servicio y ya podremos acceder normalmente a nuestro sistema con la nueva contraseña.$ sudo service mysql start
MySQL Workbench
MySQL Workbench es una aplicación que permite modelar diagramas de entidad-relación para bases de datos MySQL. Puede utilizarse para diseñar de forma visual el esquema de una base de datos nueva, documentar una ya existente o realizar una migración.
Entre sus características destaca:
- Edición de de diagramas de exportar a formatos como OpenGL, Win32, X11, Quartz, PostScript, PDF…
- Representación visual de tablas, vistas, procedimientos y funciones almacenadas y claves foráneas.
- Puede conectarse a bases de datos para obtener su modelo de representación mediante ingeniería inversa.
- Sincronización con la base de datos y el modelo.
- Permite generar los scripts para la creación de la base de datos partir del modelo generado.
Eliminar usuario en MySQL
Hace unos días explique como crear usuarios en MySQL. Pues bien, ahora nos queda ver como podemos eliminarlos.
Lo primero será comprobar si tiene algún tipo de permiso, ya que si un usuario tiene permisos no se puede eliminar. Desde la consola de MySQL ejecutaremos:
Lo primero será comprobar si tiene algún tipo de permiso, ya que si un usuario tiene permisos no se puede eliminar. Desde la consola de MySQL ejecutaremos:
SHOW GRANTS FOR 'usuario'@'localhost';a continuación eliminaremos todos los permisos concedidos al usuario:REVOKE ALL ON *.* FROM 'usuario'@'localhost';y a continuación lo eliminamos:DROP USER usuario@localhost;
Crear usuarios en MySQL
Dejar que todos los usuarios tengan todos los permisos en el Sistema de Base de Datos no es una buena idea. Para mantener la seguridad de los datos es conveniente que cada usuario o grupo de usuarios sólo puedan realizar determinadas tareas.
MySQL permite definir diferentes usuarios, y además, asignar a cada uno determinados permisos en distintos niveles:
Para limitar los permisos podemos dar acceso al usuario 'jaime' a una base de datos llamada 'Contabilidad', desde la consola de MySQL ejecutaremos:
MySQL permite definir diferentes usuarios, y además, asignar a cada uno determinados permisos en distintos niveles:
- Globales: se aplican al conjunto de todas las bases de datos en un servidor.
- Base de datos: se aplican a las Bases de Datos individuales y a todos los objetos que contiene cada Base de Datos.
- Tablas: se aplican a las tablas individuales y a todas las columnas de esas tabla.
- Columnas: se aplican a una columna en una tabla concreta.
- Rutina: se aplican a los procedimientos almacenados.
CREATE USER 'jaime'@'localhost' IDENTIFIED BY '111';De esta forma crearemos el usuario 'jaime' con password '111'. Todavía no le hemos dado ningún permiso, para dar permisos desde la consola de MySQL ejecutaremos:GRANT ALL PRIVILEGES ON *.* TO 'jaime'@'localhost' WITH GRANT OPTION;Con esto hemos dado permiso al usuario 'jaime' para acceder a todas las bases de datos y con todos los permisos (SELECT, INSERT, UPDATE, DROP...).Para limitar los permisos podemos dar acceso al usuario 'jaime' a una base de datos llamada 'Contabilidad', desde la consola de MySQL ejecutaremos:
GRANT SELECT ON Contabilidad.* TO 'jaime'@'localhost'Para saber más sobre la sentencia GRANT pulsa aquí.
Reiniciar el autoincremento de una tabla en MySQL
En muchos sistemas de bases de datos existe la propiedad AUTO_INCREMENT, que da la posibilidad de generar valores automáticos de forma cómoda y segura.
Sin embargo, en el caso de borrar todos los datos de una tabla y volver a informarlos, el valor del campo con la propiedad AUTO_INCREMENT activada seguira con la cuenta anterior en lugar de empezar de cero.
Para reiniciar la cuenta en MySQL, deberás ejecutar la siguiente sentencia:
Sin embargo, en el caso de borrar todos los datos de una tabla y volver a informarlos, el valor del campo con la propiedad AUTO_INCREMENT activada seguira con la cuenta anterior en lugar de empezar de cero.
Para reiniciar la cuenta en MySQL, deberás ejecutar la siguiente sentencia:
ALTER TABLE nombre_tabla AUTO_INCREMENT = 1
Trabajar con el conector de MySQL en MonoDevelop
Después de pelearme con el conector de MySQL os voy a explicar como se referencia dentro de una solución con MonoDevelop.
Lo primero será instalar Monodevelop y un servidor de MySQL si no lo tenemos todavía. Después tendremos que descargarnos del conector desde la página web de MySQL. Elige la opción .NET & Mono, como se indica en la imagen.
Una vez descargado, descomprime el archivo y busca el archivo mysql.data.dll, (Si estas trabajando desde Linux como es mi caso el archivo lo deberás renombrar a MySql.Data.dll, recuerda que Linux es "case sensitive") el cual deberemos instalar en la caché de ensamblados global de Mono. Para ello ejecuta, desde la carpeta donde se encuentra el archivo ejecuta:
Ahora abrimos a MonoDevelop y creamos una solución nueva.
Al crearse la solución nos dirigimos a las Referencias del proyecto y desde allí importamos el ensamblado. Para ello seleccionáis pulsamos con el botón derecho sobre "Referencias" y seleccionamos "Editar referencias...".
De las tres opciones que aparecen en el diálogo entramos en "Ensamblado .NET", buscamos el fichero MySql.Data.dll que acabamos de descargar y lo añadimos a las referencias de la solución.
Ahora ya estamos preparados para usar el conector de MySQL desde la solución de MonoDevelop.
Aquí os dejo un código de ejemplo:
Lo primero será instalar Monodevelop y un servidor de MySQL si no lo tenemos todavía. Después tendremos que descargarnos del conector desde la página web de MySQL. Elige la opción .NET & Mono, como se indica en la imagen.
Una vez descargado, descomprime el archivo y busca el archivo mysql.data.dll, (Si estas trabajando desde Linux como es mi caso el archivo lo deberás renombrar a MySql.Data.dll, recuerda que Linux es "case sensitive") el cual deberemos instalar en la caché de ensamblados global de Mono. Para ello ejecuta, desde la carpeta donde se encuentra el archivo ejecuta:
$ sudo gacutil -i MySql.Data.dllCon esto ya tendremos instalado el ensamblado para utilizarlo desde MonoDevelop. Y sólo nos queda crear el proyecto.Ahora abrimos a MonoDevelop y creamos una solución nueva.
Al crearse la solución nos dirigimos a las Referencias del proyecto y desde allí importamos el ensamblado. Para ello seleccionáis pulsamos con el botón derecho sobre "Referencias" y seleccionamos "Editar referencias...".
De las tres opciones que aparecen en el diálogo entramos en "Ensamblado .NET", buscamos el fichero MySql.Data.dll que acabamos de descargar y lo añadimos a las referencias de la solución.
Ahora ya estamos preparados para usar el conector de MySQL desde la solución de MonoDevelop.
Aquí os dejo un código de ejemplo:
Utilizar fechas en MySQL
El uso de fechas en MySQL es bastante extenso, aquí os dejo las más relevantes, a modo de introducción:
| Obtener la hora |
SELECT curtime(); |
| Obtener la fecha |
SELECT curdate(); |
| Obtener la fecha y la hora |
SELECT now(); |
| Obtener el día, mes, año u hora de una fecha |
SELECT DAY(now()); | |
SELECT MONTH(now()); | |
SELECT YEAR(now()); | |
SELECT TIME(now()); |
| Obtener el nombre del día |
SELECT dayname(now()); |
| Obtener el día de la semana |
SELECT dayofweek(now()); |
| Formatear una fecha |
SELECT DATE_FORMAT(now(),'string'); | |
| donde string puede ser: |
| %H | Hora en formato 00 - 23 | |
| %h | Hora en formato 01 - 12 | |
| %i | Minutos | |
| %p | AM o PM | |
| %s | Segundos | |
| %d | Día del mes | |
| %W | Nombre del día de la semana (Sunday...Saturday) | |
| %m | Número del mes | |
| %M | Nombre mes (January...December) | |
| %Y | Año con cuatro dígitos | |
| %y | Año con dos dígitos |
| Sumar o restar días a una fecha |
SELECT DATE_ADD(now(),INTERVAL Num Tipo) | |
SELECT DATE_SUB(now(),INTERVAL Num Tipo) | |
| donde Num indica la cantidad y Tipo puede tener los siguientes valores: |
| HOUR | Días | |
| MINUTE | Días | |
| SECOND | Días | |
| DAY | Días | |
| MONTH | Días | |
| YEAR | Días |
| Restar dos fechas |
SELECT DATEDIFF('2011-04-22','2011-04-15') |
mysqldump
Hace algun tiempo explique como hacer backups de MySQL con con mysqldump.
Esta aplicación genera un script con las sentencias para poder restaurar el backup. En el script se hacen las inserciones de multiples registros es una sola línea por lo que es bastante engorroso analizarlo. Para generar el script del backup en el que cada registro sea una línea se debe utilizar el parámetro:
--skip-extended-insert
Crear funciones en MySQL con parámetros
Hace un par de días explicaba como crear una función en MySql. Ahora vamos a explicar como se puede crear la función con parámetros y la declaración de variables.
Las variables en las funciones se declaran con la sentencia DECLARE, y se asignan valores con la sentencia SET. Esta variable es de ámbito local, y será destruida una vez finalice la función. Si se desea asignar un valor por defecto a la variable en el momento de declararla se puede utilizar la sentencia DEFAULT junto con la sentencia DECLARE. Aquí teneis el ejemplo:
Las variables en las funciones se declaran con la sentencia DECLARE, y se asignan valores con la sentencia SET. Esta variable es de ámbito local, y será destruida una vez finalice la función. Si se desea asignar un valor por defecto a la variable en el momento de declararla se puede utilizar la sentencia DEFAULT junto con la sentencia DECLARE. Aquí teneis el ejemplo:
CREATE FUNCTION HolaMundo() RETURNS VARCHAR(30)
BEGIN
DECLARE salida1 VARCHAR(30) DEFAULT 'Hola';
DECLARE salida2 VARCHAR(30);
SET salida2 = ' mundo';
RETURN CONCAT(salida1,salida2);
END;Para mostraros como crear una función con parámetros, os dejo este ejemplo:CREATE FUNCTION HolaMundo(entrada VARCHAR(30)) RETURNS VARCHAR(30)
BEGIN
DECLARE salida VARCHAR(30);
SET salida = entrada;
RETURN salida;
END;Para llamar a esta función:SELECT HolaMundo('Hola Mundo');
Crear funciones en MySQL
Tener funciones y procedimientos en MySQL hace aumentar el rendimiento, ya que en lugar de enviar la información para procesar los datos y obtener un resultado, directamente los datos son procesados en el servidor y sólo se envia el resultado. Además esta función puede ser utilizada desde otros lenguajes.
MySQL tiene muchas funciones para usar, pero en ocasiones podemos necesitar crear nuestras propias funciones para hacer cosas más específicas…
Os explicaré como crear la función "Hola Mundo" (que original):
MySQL tiene muchas funciones para usar, pero en ocasiones podemos necesitar crear nuestras propias funciones para hacer cosas más específicas…
Os explicaré como crear la función "Hola Mundo" (que original):
CREATE FUCNTION HolaMundo() RETURNS VARCHAR(20)
BEGIN
RETURN 'Hola Mundo';
END;Para utilizarla ejecutaremos:SELECT HolaMundo();Y para eliminarla:DROP FUNCTION HolaMundo;
Suscribirse a:
Entradas (Atom)












