Las bases de datos son la mejor manera de almacenar datos, y ¡cada día hay más y más datos! Los próximos serán años de data-mining, machine learning y mucha automatización. La única forma de lograrlo es dominando las bases de datos.
Al principio, la información se guardaba en archivos más simples como .csv
(separados por comas). Esto era muy desorganizado, los datos eran fáciles de corromper y de difícil acceso (imagina tener que buscar archivos separados por comas).
En algún momento, nuestro amigo Edgar decidió rediseñar esos archivos y creó una forma estándar de almacenar datos en archivos centrados en el rendimiento y la integridad. Se asoció con el señor Donald y juntos crearon un lenguaje llamado SQL, que fue diseñado para trabajar con datos de una manera muy amigable.
SQL es el lenguaje más utilizado cuando se desea hablar directamente con una base de datos. Significa: Structured Query Language (Lenguaje de Consulta Estructurada) y es un lenguaje informático para almacenar, manipular y recuperar datos que se almacenan en bases de datos relacionales.
La sintaxis de consulta SQL se ve como esto:
1SELECT username FROM user WHERE email='info@breatheco.de'
En este ejemplo, solicitamos a la base de datos todos los usuarios con el correo electrónico igual a "info@breatheco.de"
☝️ Si deseas ganarte el respeto de un desarrollador, necesitas sentirte cómodo con SQL. Lo usarás MUCHO cuando trabajes con datos.
Las bases de datos son similares en apariencia a las hojas de cálculo: todo se almacena en tablas con filas y columnas. Cada columna representa atributos comunes en las filas en las que intersectan, que son instancias de datos.
Cada tabla es una entidad de información con “Personas”, “Autos”, “Eventos”, etc. Las filas contienen la información actual del asunto - así que si tenemos una tabla llamada "Personas", puede contener columnas para "Nombre", "Apellido" y para un "id". Una fila tendría los valores correspondientes a la columna, como "Luis", "Perez" y "42". La tabla es la única estructura capaz de almacenar datos vía SQL.
Las tablas tienen columnas (como excel). Una tabla llamada Persona puede tener 4 columnas: Nombre, apellido, fecha de nacimiento y peso. Una tabla puede tener tantas columnas como tú quieras y tendrán un tipo de valor específico (string, entero, boolean, etc.) Las columnas describen la tabla de una forma similar a como las propiedades describen una clase en la programación orientada a objetos.
Si una tabla es llamada Personas y tiene esas 4 columnas (nombre, apellido, fecha de cumpleaños y peso) entonces las filas serán cada persona en específico que has almacenado en tu base de datos.
Una base de datos es una colección de tablas interconectadas. La conexión entre dos tablas se denomina "relación" y puede ser una de las siguientes:
Una a una:
El ejemplo perfecto es la base de datos de seguridad social, probablemente esta base de datos tiene una tabla llamada Contribuyente que contiene toda la información acerca de cada persona con un número de seguridad social y otra tabla con las Declaraciones De Impuestos del año en curso: Una persona puede tener solo una declaración y solo una declaración puede ser hecha por una persona.
Una a muchos:
La base de datos de las Grandes Ligas en Baseball probablemente tiene una tabla llamada Jugadores (con la lista de todos los jugadores activos) y otra tabla llamada Equipos con la lista de todos los equipos activos. Ambas tablas están conectadas porque un equipo tiene muchos jugadores, pero un jugador puede estar en un solo equipo.
Muchos a Muchos:
Una base de datos de la Biblioteca Pública probablemente tenga una tabla llamada Autor (que contiene la información de todos los autores con libros publicados), y también otra tabla con TODOS los libros que se han publicado. Ambas tablas están relacionadas porque un autor puede tener muchos libros y un libro puede tener muchos autores.
Hay 3 operaciones principales que se pueden hacer en una tabla: Crear, actualizar o eliminar una tabla. En SQL, esas operaciones se llaman Create, Alter y Dro. Recuerda que estas operaciones se utilizan para manipular la estructura de la base de datos, no la información que contiene.
Crea una nueva tabla, una vista de una tabla u otro objeto en la base de datos.
1CREATE TABLE IF NOT EXISTS `chat_group` ( 2 `chat_group_id` int(10) UNSIGNED NOT NULL, 3 `name` varchar(20) NOT NULL, 4 `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 5 PRIMARY KEY('chat_group_id') 6) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Modifica un objeto de base de datos existente, como una tabla.
1ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
Elimina una tabla completa, una vista de una tabla u otro objeto en la base de datos.
1DROP TABLE CUSTOMERS;
Cuando usas SQL, tienes 4 comandos principales para manipular datos: SELECT, INSERT, UPDATE y DELETE.
Todos esos comandos están diseñados para manipular UNO o VARIOS registros/filas de la base de datos al mismo tiempo. Pero, solo puede ejecutar UN comando a la vez.
Esta es la operación más utilizada. Es la única forma de recuperar cualquier fila/registro específico de datos desde una base de datos. Puedes especificar qué filas desea recuperar solicitando un grupo de condiciones que esas filas deben cumplir.
1SELECT column1, column2... columnN FROM table1 WHERE column1 = 3; 2 3//Select a particular user by his Social Security Number 4SELECT ssn, username, email FROM USER WHERE ssn = '233-34-3453';
Crea una nueva fila/registro en la tabla. Se agregará al final.
1INSERT INTO table_name (column1,column2,...columnN) VALUES (value1,value2,...valueN); 2 3//Insert a particular user 4INSERT INTO USER (ssn,username,email) VALUES ('234-45-3342','alesanchezr','a@breatheco.de');
Actualiza un registro o una fila de una tabla específica. Debes proporcionar una o varias condiciones para identificar las filas específicas que desea actualizar
1UPDATE table_name SET column1 = value1 WHERE [condition] 2 3//updating the email of a user 4UPDATE USER SET email = 'new@breatheco.de' WHERE ssn = '333-44-5534'
Funciona de manera muy similar a update, pero, en lugar de pasar los nuevos valores de las nuevas columnas que deseas actualizar, solo necesitas especificar qué filas deseas eliminar solicitando un grupo de condiciones.
1DELETE FROM table_name WHERE [condition] 2 3//delete all users (the condition is optional 4DELETE FROM user; 5 6//delete a specific user 7DELETE FROM user WHERE ssn = '342-45-6732'
¡Mantener la integridad de los datos es difícil! Las bases de datos con muchas actividades y usuarios normalmente luchan por mantener la integridad de los datos. ¡A veces los datos son tan delicados y sensibles que agregar un cero a un entero simplemente podría terminar haciendo millonario a alguien!
Nosotros podemos clasificar los problemas de integridad en 4 tipos:
Una transacción es un grupo de una o más operaciones SQL (insertar, eliminar, actualizar, crear, etc.).
Una transacción agrupa varias operaciones en una porque todas dependen unas de otras. Debe tener la garantía de que si una de esas operaciones falla, la base de datos deshará todo lo que hizo dentro de la misma transacción.
Por ejemplo, supongamos que un Cliente del Banco está transfiriendo dinero de una cuenta a otra. Esta transacción implica dos operaciones:
¿Qué pasa si la primera operación fue exitosa pero la segunda falló? Debe "deshacer" la primera o el usuario perderá el dinero para siempre
Las transacciones tienen las siguientes cuatro propiedades estándar, generalmente referidas por el acrónimo ACID:
Estos son los comandos utilizados para controlar las transacciones:
Los comandos de control transaccional solo se usan con los comandos DML INSERT, UPDATE y DELETE. No se pueden usar al crear tablas o eliminarlas porque estas operaciones se confirman automáticamente en la base de datos.
El comando COMMIT es el comando transaccional utilizado para guardar los cambios invocados por una transacción en la base de datos.
El comando COMMIT guarda todas las transacciones en la base de datos desde el último comando COMMIT o ROLLBACK.
La sintaxis para el comando COMMIT es la siguiente:
1//operation one... 2 3//operation two... 4 5//operation three... 6 7COMMIT;
El comando ROLLBACK es el comando transaccional utilizado para deshacer transacciones que aún no se han guardado en la base de datos.
El comando ROLLBACK solo se puede usar para deshacer transacciones desde que se emitió el último comando COMMIT o ROLLBACK.
La sintaxis para el comando ROLLBACK es la siguiente:
1//any operation before the rollback 2INSERT INTO client_account SET (amount) VALUES (1000) 3 4//now we rollback the transaction, the insert never happened 5ROLLBACK;
Un SAVEPOINT es un punto en una transacción cuando puede revertir la transacción a un cierto punto sin revertir toda la transacción.
La sintaxis para el comando SAVEPOINT es la siguiente:
1SAVEPOINT SAVEPOINT_NAME;
Este comando solo sirve en la creación de un SAVEPOINT entre declaraciones transaccionales. El comando ROLLBACK se usa para deshacer un grupo de transacciones.
La sintaxis para volver a una SAVEPOINT es la siguiente:
1ROLLBACK TO SAVEPOINT_NAME;
El comando RELEASE SAVEPOINT se usa para eliminar un SAVEPOINT que ha creado.
La sintaxis para RELEASE SAVEPOINT es la siguiente:
1RELEASE SAVEPOINT SAVEPOINT_NAME;
El comando SET TRANSACTION se puede usar para iniciar una transacción de base de datos. Este comando se utiliza para especificar características para la transacción siguiente.
Por ejemplo, puede especificar que una transacción sea de solo lectura o de lectura y escritura.
La sintaxis para SET TRANSACTION es la siguiente:
1SET TRANSACTION [ READ WRITE | READ ONLY ];