Explicación sencilla entre 0, NULL o indefinido:
Introducción
Todo lo que aprenderás sobre SQL y MySQL
Instalación local de un RDBMS (Windows)
Instalación local de un RDBMS (Mac)
Instalación local de un RDBMS (Ubuntu)
La consola de MySQL
¿Qué es una base de datos?
CREATE
Comando CREATE
Tipos de columnas / Creación de la tabla books
Tipos de columnas / Creación de la tabla authors
Tipos de columnas usando / Creación de la tabla clientes
INSERT
Comando INSERT
Comando on duplicate key
Inserción de datos usando queries anidados
Bash y archivos SQL
Bash y archivos SQL
SELECT
Su majestad el SELECT
Comando JOIN
Left JOIN
Tipos de JOIN
5 casos de negocio
Continuación de casos de negocio
Comandos UPDATE Y DELETE
Consultas en MySQL
Super Querys
Comando mysqldump
Contenido Bonus
Bases de datos para Big Data
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 191
Preguntas 85
Explicación sencilla entre 0, NULL o indefinido:
Hola para los que quieran un editor de texto como el que el profe usa para escribir el código, recomiendo Visual Estudio Code. Si no saben (como yo) como vincular Visual Estudio Code con MySQL acá les dejo un tutorial que me funcionó, saludos!
Tutorial: https://www.youtube.com/watch?v=AJUJ1f9gFm8
Query OK
CREATE TABLE IF NOT EXISTS books(
book_id INTEGER UNSIGNED AUTO_INCREMENT,
author INTEGER UNSIGNED,
title VARCHAR(100) NOT NULL,
year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
lenguage VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Lenguage',
cover_url VARCHAR(500),
price DOUBLE (6,2) NOT NULL DEFAULT 10.0,
sellable TINYINT(1) DEFAULT 1,
copies INTEGER NOT NULL DEFAULT 1,
description TEXT,
PRIMARY KEY (book_id)
);
RESUMEN:
iniciamos con—> CREATE DATABSE platzi_operation;
creamos DB----> CREATE DATABASE IF NOT EXISTS platzi_operation;
Si ay existe, dirá que el Query es OK, está blindado y no será arrojado como error
muestra—> SHOW warnings.
La DB no peude crearrse por que ya existe.
CREATE DATABSE platzi_operation; Me arroja un ERROR como un error porque ya existe.
Nota: Cuando te arroja empty sets quiere decir que no hay nada de data en lo que estás consultando.Cuando te conectas en un driver las tuplas son nulas.
Tip: Cada tabla se llame en el plural del sustantivo que vamos a guardar. Si guardas libros pues la tabla deberá llamarse LIBROS. Y de preferencia en ingles.
Convention over configuration.
Tip: No se gurdan archivos binarios en la base de datos relacional, nunca guardar una imagen, pero si una referencia.
Tip: Lo que necesita toda tabla es un ID. para ubicar a cada tupla de manera única, un entero autoincremental.
CREATE TABLE IF NOT EXIST books (
book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
author, // Se deja sin indicar debido a que posteriormente tendrá un campo numérico ID en una tabla distinta.
title VARCHAR(100) NOT NULL, // Estamos diciendole que exija un dato no nulo, es decir que exista algo, asi sea un espacio, pues los espacios aunque invisibles ocupan memoria.
year INTEGER UNSIGNED NOT NULL DEFAULT 1900, // Si no le envío nada por defecto me pondrá un valor determinado. (1900),
lenguaje VARCHAR (2) NOT NULL DEFAULT ‘es’ COMMENT// Convencion de idiomas en dos letras, comentarios solo los ven los que tienen acceso a la estructura.
cover_url VARCHAR (500),
price DOUBLE (6,2) NOT NULL DEFAULT 10.0,// Decimales. Escribame 6 digitos, y 2 decimales. Por lo que tengo 4 en las unidaes y 2 decimales.
________BANDERAS:
sellable TINYINT (1) DEFAULT 1, // Se puede vender si o no.
copies INTEGER NOT NULL DEFAULT 1,
description TEXT
);
Llave primaria autoincremental. Al borrar una tupla el número autoincremental lo que hace es que sigue con el número en el que iba, MySQL no detecta la tupla eliminada.
El número que existe en esta columna no necesariamente es la Cardinalidad de la tabla.
La cardinaldiad es el número de elementos de un conjunto en esta tabla.
Podemos hacer que un INTEGER sea +/- o, Solo positivo: No almacena en el campo de byte el signo, por lo que sea horran potencias de dos para mejorar el espacio.
UNSIGNED No almacena el simbolo por lo que almacena solo positivo.
NOTA: Los datos numéricos pueden ser del tipo TINYINT,SMALLINT,MEDIUMINT,INT O INTEGER, BIGINT. El tipo de dato entero que hoy en día circula en algunos contextos ya pasó la capacidad del tipo de dato INTGER existente,esto en casi cualquier lenguaje de programción, y si decidieramos almacenarla como string y luego castearla a int tendríamos un problema de overhead.
me da mal sabor de boca cuando iniciando un curso el docente no se toma el tiempo suficiente o no entrega los paso a paso para instalar el laboratorio de prácticas IDÉNTICO al que el utiliza sin objeción debería ser un vídeo, lo mismo o igualmente las herramientas que ellos usan en los vídeos.
laboratorio de prácticas IDÉNTICO —> creo que en este caso es una consola unix
entonces el cursos ya no es práctico porque las herramientas en los diferentes S.O son distintas (comandos y demás / no veo feedback para las preguntas de los estudiantes en este tema de configuración) y el curso se vuelve solo ver vídeos y vídeos, lo mismo me paso en el curso anterior “Curso de introducción a la terminal y línea de comandos” donde me toco instalar linux en windows entonces el directorio no era el mismo, el docente tenía ya en su máquina una serie de archivos y configuraciones en donde realizo practicas pero los estudiantes quedamos plop, entonces fue terminar de ver los vídeos y ya…
no se si la mayoría de cursos son así pues solo llevo realizados los cursos de esta ruta de aprendizaje? Y los 2 primero fueron EXCELENTES y no quiero ni imaginar si me pasara con un curso más técnico.
ESPERO ESTO MEJORE A MEDIDA QUE AVANZO EN PLATZI.
INTEGER: Es un entero,Ocupa 4 bytes.
AUTO_INCREMENT: Hace enteros que se auto incrementan, se meten a una dupla y detecta el numero para hacerlo crecer automáticamente. *Al borrar un dato de MYSQL no lo nota y sigue aumentando números, EJEMPLO 1 2 4, si se elimina el 3 no le importa y sigue contando.
UNSIGNED: hace que un entero sea positivo o negativo o solo positivo. (perdón no lo comprendí bien).
TINYINT: Ocupa 1 byte.
SMALLINT: Ocupa 2 byes.
-Varchar: Tu le tienes que indicar el numero de caracteres a almacenar de texto.EJEMPLO VARCHAR(2) SI.
-NOTNULL: Es decirle a MYSQL que no almacene algo ,algo nulo es que no existe información, en otras palabras es nada.
Year: 10/11/1900
DEFAULT: Es que no le mando información por defecto debe poner el valor que se agrega después del mismo.
COMMENT: Comentario a la columna, que solo se ve al revisar el código.
DOUBLE: Almacena los números enteros y los decimales. *DOUBLE (6,2) esto hace que de los 6 números que le estamos diciendo 2 de ellos los use solo para decimales.
FLOAT: Es un numero que esta almacenando hasta 6 decimales, es para cálculos precisos.
TEXT: Es meter tanto como se pueda. EJEMPLO Descripción de un libro
NO ejecuten el script todavía, ESPEREN al siguiente video
Hay un error y es que DOUBLE permite una mayor precisión en la cantidad de decimales, que FLOAT
Además de eso FLOAT permite una presición de 0 a 23 mientras que DOUBLE la maneja de 24 a 53
y según la documentación de MySQL se recomienda usar para los precios el tipo de dato Decimal(m,n) m cantidad de bits en total, n cantidad en decimal.
No se recomienda usar FLOAT o DOUBLE por que no se guardan de una manera tan fiable, y puede que si guardas un 4, te arroje un 3.99999999999
Buenas prácticas:
6- Comando Create
El comando create sirve para crear ya sea tablas o bases de datos, al agregar la instrucción “if not exists” estamos blindando el query, al hacer esto sí la bases de datos existe nuestro RDBMS nos arrojaría un query ok, en vez de query ERROR.
A vece cuando hacemos un querys como “show tables”, nuestro RDBMS nos marca por consola empty set que significa que no hay nada.
Se debe tomar en cuenta que a veces cuando nos conectamos a través de un driver la respuesta es cero o NULL esto se debe a por que la tuplas afectadas es cero.
Al momento de declarar una valor de tipo entero o punto flotante podemos decidir sí guardar el signo en la cadena de bytes.
/*Crear Bases de datos*/
CREATE DATABASE IF NOT EXISTS platzi_operations DEFAULT CHARSET utf8 ;
/*muestra bases de datos*/
SHOW DATABASES;
/*Usar bases de datos*/
USE platzi_library;
/*mostrar bases de datos usada*/
SELECT DATABASE();
/*Mostrar tablas*/
SHOW TABLES;
/*muestra el mensaje de advertencia*/
SHOW WARNINGS;
/*Creación de la tabla*/
CREATE TABLE IF NOT EXISTS `books` (
`book_id` INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`year` INTEGER UNSIGNED NOT NULL DEFAULT 1900,
`language` VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Language',
`coverurl` VARCHAR (500),
`price` DOUBLE(6,2) NOT NULL DEFAULT 10.0,
`sellable` TINYINT(1) NOT NULL DEFAULT 1,
`copies` INTEGER UNSIGNED NOT NULL DEFAULT 0,
`descirption` TEXT
)
;
Listado de cada uno de los tipos de dato numéricos en MySQL, su ocupación en disco y valores.
INT (INTEGER): Ocupación de 4 bytes con valores entre -2147483648 y 2147483647 o entre 0 y 4294967295.
SMALLINT: Ocupación de 2 bytes con valores entre -32768 y 32767 o entre 0 y 65535.
TINYINT: Ocupación de 1 bytes con valores entre -128 y 127 o entre 0 y 255.
MEDIUMINT: Ocupación de 3 bytes con valores entre -8388608 y 8388607 o entre 0 y 16777215.
BIGINT: Ocupación de 8 bytes con valores entre -8388608 y 8388607 o entre 0 y 16777215.
DECIMAL (NUMERIC): Almacena los números de coma flotante como cadenas o string.
FLOAT (m,d): Almacena números de coma flotante, donde ‘m’ es el número de dígitos de la parte entera y ‘d’ el número de decimales.
DOUBLE (REAL): Almacena número de coma flotante con precisión doble. Igual que FLOAT, la diferencia es el rango de valores posibles.
BIT (BOOL, BOOLEAN): Número entero con valor 0 o 1.
realmente me parece importante verlo ejecutar el código del que habla, porque la teoria esta pero no vemos la creacion en proceso
¿Como soluciono este error?
ERROR 1064 (42000): 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 'AUTO_INCREMENT,
Mi query
CREATE TABLE IF NOT EXISTS products (
product_id INTEGER PRIMARY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
stock INTEGER UNSIGNED NOT NULL DEFAULT 0,
price INTEGER UNSIGNED NOT NULL DEFAULT 0,
)
APUNTES:
CREATE TABLE IF NOT EXISTS 'name'
CREATE DATABASE IF NOT EXISTS 'name'
en la sintaxis existe algun orden en el momento de crear la tabla? es decir por ejemplo: puedo poner primero auto_increment, luego el tipo de dato,comment, not null?
que diferencia hay entre booleano y TINYINT?
Coincido con el profesor. No guarden binarios en la BD. Es de lo primero que aprendí hace años cuando inicié a trabajar con bases de datos.
Para los que no pueden limpiar la pantalla de la consola, intenten el siguiente comando:
System cls;
Espero les sirva 😎👋🏻
yo si limpie mi pantalla en windows, sin usar ( cls, clear o ctrl + L)
.
.
.
utilice un pañuelo.
Se debería decir que tipo de editor se debe de utilizar para estar en paralelo.
📖 Notas de clase
# Creacion de base de datos
CREATE DATABASE platzi_operation;
# Creacion de base de datos usando un condicional
CREATE DATABASE IF NOT EXISTS platzi_operation;
# Mostar Warnings
SHOW warnings;
# Mostar bases de datos
SHOW DATABASES
# Utilizar una base de datos
USE platzi_operation;
# Mostrar tablas
SHOW TABLES
# CREACION DEL PROYECTO [LIBRERIA]
# Buena practica: Usar el nombre de la tabla en plural
CREATE TABLE IF NOT EXISTS books(
book_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
author ,
title VARCHAR(100) NOT NULL,
year INT UNSIGNED NOT NULL DEFAULT 1900,
language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Lenguage',
cover_url VARCHAR(500),
price DOUBLE(6,2) NOT NULL DEFAULT 10.0,
sellable TINYINT(1) DEFAULT 1,
copies INT NOT NULL DEFAULT 1,
description TEXT
);
MySql al recibir un valor NULL en una columna NOT NULL
EXCELENTE CURSO
VARCHAR tiene un tamaño editable con un máximo de 65535 caracteres. Es decir, el usuario tendría que especificar una longitud entre 1 y 65535 caracteres.
delfstack .com
Hola! Si no les funciona el CREATE database platzi_operation; intenten ponerlo asi: CREATE Database platzi_operation;
Si quieren un editor de SQL atractivo y facil de usar les recomiendo mucho Arctype.
https://arctype.com/
.
Les ayuda con autocompletado y pueden ver las tablas graficamente y demas. Es un editor hecho con tecnologias web creo, solo deben hacer la conexion con su base de datos ya creada y comenzar a trabajar.
CREATE database platzi_operation;
CREATE DATABASE IF NOT EXISTS platzi_operation;
CREATE database platzi_operation;
//manda error distinto al de la anterior sentencia
show databases;
use platzi_operation;
show tables;
CREATE TABLE IF NOT EXISTS books(
book_id INTEGER PRIMARY AUTO_INCREMENT,
author ,
title VARCHAR(255) NOT NULL,
year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Language',
cover_url VARCHAR(500),
price DOUBLE(6,2) NOT NULL DEFAULT 10.0,
sellable TINYINT(1) DEFAULT 1,
copies INTEGER NOT NULL DEFAULT 1,
description TEXT
)```
Existen distintos tipos de enteros, int, tinyint, bigint
Double es para decimales, float solo almacena hasta 6 y es para calculos precios
CREATE DATABASE IF NOT EXISTS [nombre DB];
DROP DATABASE IF EXISTS [nombre BD];
Almacenar imágenes en un abase de datos: En un varchar, la url de donde esta la imagen.
Entiendo que una buena práctica es el uso de las palabras reservadas debe ser en mayúscula cerrada, cierto?
VARCHAR(n)
COMMENT
Buenas clases
Y así como por curiosidad , el dato BIGINT es el que se usa o también ya fue pasado?
como limpio la consola en windows?
No hay atajos en Windows para limpiar pantalla, pero el scroll down funciona bien 😃
CREATE TABLE IF NOT EXISTS books (
book_id INTEGER UNSIGNED PRIMARY AUTO_INCREMENT,
author ,
title VARCHAR(100) NOT NULL,
year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
language VARCHAR(2) NOT NULL DEFAULT ‘es’ COMMENT ‘ISO 639-1’,
cover_url VARCHAR(500),
price DOUBLE(6,2) NOT NULL DEFAULT 10.0,
sellable TINYINT(1) DEFAULT 1,
copies INTEGER NOT NULL DEFAULT 1,
description TEXT
);
CREATE TABLE IF NOT EXISTS books ( book_id INTEGER UNSIGNED PRIMARY AUTO_INCREMENT, author , title VARCHAR(100) NOT NULL, year INTEGER UNSIGNED NOT NULL DEFAULT 1900, language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 629-1 Language', cover_url VARCHAR(500), price DOUBLE(6,2) NOT NULL DEFAULT 10.0, sellable TINYINT(1) DEFAULT 1, copies INTEGER NOT NULL DEFAULT 1, description TEXT );
FLOAT(entero,decimal): se utiliza para cálculos más precisos. la parte decimal : puede guardar hasta 6 cifras
Si obtienen éste error: ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
Se soluciona así: SET GLOBAL read_only=0;
dejo por aqui un concepto que menciono es importante conocerlo bandera
BANDERA
En programación, bandera (flag) se refiere a uno o más bits que son usados para almacenar un valor binario o código que tiene un significado asignado.Las banderas son generalmente encontradas como miembros de una estructura de datos definida (como una entrada en una base de datos) y el significado del valor contenido en una bandera generalmente será definido en relación a la estructura de datos a la que pertenece. En muchos casos, el valor binario de una bandera será para representar uno de varios posibles estados o categorías. En otros casos, los valores binarios podrían representar uno o más atributos en un campo de bit, generalmente relacionado a habilidades o permisos, como “puede ser escrito” o “puede ser eliminado”. De todas maneras hay muchos otros posibles significados que pueden ser asignados a los valores en las banderas. Un uso común de banderas es para marcar o designar estructuras de datos para el procesamiento futuro.
https://soloprogramacionsena.blogspot.com/2009/09/bandera-en-programacion-bandera-flag-se.html
CREATE DATABASE IF NOT EXISTS platzi;
USE platzi;
Tablas en plural
Atributos en singular
Toda tabla necesita una llave primaria
CREATE TABLE IF NOT EXISTS books(
book_id INTEGER PRIMARY KEY AUTO_INCREMENT,
);
En BD relacionales NO guardar imágenes
CREATE TABLE IF NOT EXISTS books(
book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
author ,
title VARCHAR(100) NOT NULL,
year INTEGER UNSIGNED NOT NULL DEFAULT 1990,
language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Language'
cover_url VARCHAR(500),
price DOUBLE(6,2) NOT NULL DEFAULT 10.0,
sellable TINYINT(1) DEFAULT 1,
copies INTEGER NOT NULL DEFAULT 1,
description TEXT
);
CREATE TABLE IF NOT EXISTS books(
book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT
);
¿Algún atajo para limpiar mi pantalla en windows? aparte de system cls
Básicamente lo mismo pero para MariaDB
<
CREATE table books(
book_id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
author VARCHAR(255),
title VARCHAR(100) NOT NULL,
year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
lenguage VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Lenguage',
cover_url VARCHAR(500),
price DOUBLE(6, 2) NOT NULL DEFAULT 10.0,
sellable SMALLINT(1) DEFAULT 1,
copies INTEGER NOT NULL DEFAULT 1,
descripcion TEXT
);
>
Les dejo un pequeño cuadro de mi resumen sobre tipo de dato de texto y numérico
Este es un pequeño cuadro resumen de los distintos Constrains o restricciones que se pueden aplicar en mysql
create table if not exists mytable
, crea una nueva tablaUnsigned
, para solo usar los números positivos.autoincrement
, en cada inserción del registro se incrementa en 1.default
, indicar valores por defecto.comment
, agregar comentarios a la columna.Colegas, el ultimo comentarios es muy importante, Tanto para el nombre de la tablas o de los campos, NO UTILICEN PALABRAS RESERVADAS tampoco pongan caracteres extraños, estuve modificando un paquete que en tabla tenia el campo Póliza con asentó en la o, cada que promovíamos el cambio era una pesadilla explicarle al DBA por que le tronaba en la ejecución del Script y que tenia que ejecutar en otro lado que no fuer la consola (Un ID Toad poe ejemplo ).
Así que eviten cualquier problema y solo utilicen letras y _ para separar las palabras, nada de palabras reservadas o caracteres especiales.
Está clase me recordo al meme de freddy el de “es imposible” en el minuto 4:27
Perfecto. Muy buena explicación.
Por si a alguien no le funciona
CREATE TABLE `books` (
`book_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author_id` int(10) unsigned DEFAULT NULL,
`title` varchar(100) NOT NULL,
`year` int(11) NOT NULL DEFAULT '1900',
`language` varchar(2) NOT NULL COMMENT 'ISO 639-1 Language code (2 chars)',
`cover_url` varchar(500) DEFAULT NULL,
`price` double(6,2) DEFAULT NULL,
`sellable` tinyint(1) NOT NULL DEFAULT '0',
`copies` int(11) NOT NULL DEFAULT '1',
`description` text,
PRIMARY KEY (`book_id`),
UNIQUE KEY `book_language` (`title`,`language`)
)
Encontre esta informacion en una pagina de bachiller espero sea util:
Clave primaria (Primary Key). Permite declarar un atributo o un conjunto de atributos como clave primaria de una relación, por lo que sus valores no se podrán repetir ni se admitirán los nulos (o valores “ausentes”). La obligatoriedad de la clave primaria es una restricción inherente del modelo relacional; sin embargo, la declaración de un atributo como clave primaria de una relación es una restricción semántica que responde a la necesidad del usuario de imponer que los valores del conjunto de atributos que constituyen la clave primaria no se repitan en la relación ni tampoco tomen valores nulos.
Unicidad (Unique). Mediante la cual se indica que los valores de un conjunto de atributos (uno o más) no pueden repetirse en una relación. Esta restricción permite la definición de claves alternativas.
Obligatoriedad (Not Null). Se indica que para el conjunto de atributos (uno o más) no se admiten valores nulos.
Integridad referencial (Foreign Key). Si una relación R2 (relación que referencia) tiene un descriptor que es una clave candidata de la relación R1 (relación referenciada), todo valor de dicho descriptor debe concordar con un valor de la clave candidata referenciada de R1 o bien ser nulo. El descriptor es, por tanto, una clave ajena de la relación R2. Las relaciones R1 y R2 no son necesariamente distintas.
muy bueno
Cardinalidad: El numero de elementos de un conjunto, en particularidad de esta tabla.
Interesante lo de comment, y lo es, muchas veces me ah tocado revisar base de datos de terceros y a veces uno no sabe a que es lo que hace referencia tal campo. Hasta a mí se me ha pasado por alto los comentarios 😄
Atributo que permiten los campos de tipo numérico es “unsigned”.
El atributo “unsigned” (sin signo) permite sólo valores positivos.
Si necesitamos almacenar edades, por ejemplo, nunca guardaremos valores negativos,
entonces sería adecuado definir un campo “edad” de tipo entero sin signo
Listo creada la base y la tabla.
Mencionaban en la clase que si creas una tabla y luego en un futuro cambias el tipo de dato de alguna columna, “el overhead de nuestros programas se va al diablo”
¿Es esto lo que se conoce como casteo? ¿Por qué no es recomendable y de que manera afecta a nuestros programas o consultas?
Hola, no me deja crear la tabla con la sentencia UNSIGNED , sera la version de MySQL?
Se puede limpiar pantalla en Windows?
Alguien sabe cuál es el editor de texto que usa el profesor?
SHOW warnings; muestra el warning
CARDINALIDAD: numero de elementos de un conjunto.
En la parte de author, el maestro dice que no le pondrá un nombre sino un valor numérico. Esto hace referencia al concepto de “llave foránea” que seguramente veremos en clases posteriores.
Cardinalidad
La cardinalidad son simplemente las relaciones que pueden existir entre las tablas de una base de datos.
uno a uno
uno a muchos
muchos a a uno
Lenguaje DDL
Lenguaje de definición de datos:
Create: crear objectos tales como vistas, tablas, store procedures e indices.
Drop: Utilizado para eliminar objectos como vistas, store procedures, tablas.
Alter: Empleado para editar tablas agregando campos o cambiando la definición de los mismos.
Una buena practica es que el nombre de la tabla debe ser un sustativo en plurarl en ingles.
Tipos de Datos:
Texto:
Numéricos:
Tengo un profesor que trabaja con ingeniería de datos, tiene mucha experiencia y el recomienda nombrar las tablas con el singular.
La verdad de se me hace que es de gustos o de que favorezca la legibilidad del código según la manera en que tu vayas a programar las interacciones con la bd
En un proyecto que hice yo guarde las imagenes en una BD de Objetos. Existen varios:
Amazon S3
DigitalOcean Spaces
y los otros proveedores cloud ofrecen soluciones.
La ventaja de un Object Storage es la integración con el CDN.
Tipos de datos en una base de datos MySQL
CREATE database IF NOT EXISTS platzi_operation;
USE platzi_operation;
CREATE table IF NOT EXISTS books (
book_id INTEGER UNSIGNED PRIMARY AUTO_INCREMENT,
author,
title VARCHAR(100) NOT NULL,
year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
language VARCHAR(2) NOT NULL DEFAULT ‘es’ COMMENT ‘ISO 639-1 Language’,
cover_url VARCHAR(500),
price DOUBLE(6,2) NOT NULL DEFAULT 10.0,
sellable TINYINT(1) DEFAULT 1,
copies INTEGER NOT NULL DEFAULT 1,
description TEXT
);
Hola a todos!
Porque mi consola de MySQL cuando le doy el comando CREATE no me dice ok, solo aparace una flecha
Your MySQL connection id is 2
Server version: 5.7.21 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql>
mysql> CREATE database platzi_operation:
->
->```
Aconsejo usar Notepad ++ (el del camaleón) que se puede descargar gratis. Ahí en la barra horizontal superior seleccionar “Language” luego ahí “S” y por último “SQL”. Eso les ayudará a trabajar en formato SQL.
BUENA PRÁCTICA: Se recomienda colocar en el nombre de las columnas, el nombre de la tabla, para evitar ambigüedades de nombres de columnas y evitar utilizar palabras reservadas del sistema gestor de bases de datos. Por ejemplo: la columna year, donde year puede ser una función de mysql, entonces la dejaríamos como year_book.
NOT NULL
DOUBLE(entero,decimal) Ejemplo: DOUBLE (6,2) estamos diciendo que es una cifra de 6 dígitos, y esto se entiende cuales 4 son valor entero y 2 son para decimal
- Tipos de dato:
**Texto: **
CHAR(n), VARCHAR(n), TEXT
El tipo de dato CHAR(N), aloja una cantidad pequeña de datos y este lo hacer reservando en memoria RAM un conjunto de bloques que no crece de manera dinámica 8 caracteres, en cambio VARCHAR(n), acoge una cantidad de cadena de caracteres de máximo de 255 caracteres y este lo hace a través de un proceso en memoria ram más dinámico. el tipo de dato TEXT se utiliza para guardar una cantidad mayor a 255 caracteres.
Números:
INTEGER, BIGINT, SMALLINT, DECIMAL(n,s), NUMERIC(n,s)
El tipo de dato INTEGER, este representa a los números enteros, tanto BIGINT como SMALLINT son subtipos de datos de integer el primero se utiliza es cuando se va a guardar un número muy grande y el segundo cuando de va a guardar números menor o igual que 100.
El tipo de dato DECIMAL(n,s), NUMERIC(n,s), permiten declarar número más complejos o precisos, y esto reciben dos parámetros el primer parámetro es la parte entera del número y el segundo la parte decimal.
Fecha/hora:
DATE, TIME, DATETIME, TIMESTAMP
El tipo de dato DATE, puedes guardar año y mes.
El tipo de dato TIME, puedes guardar la hora.
El tipo de dato DATETIME, TIMESTAMP puedes guardar tanto el día como la hora incluso hasta milisegundos.
Lógicos:
BOOLEAN
El tipo de dato BOOLEAN, puede guardar sólo valores binarios es decir : TRUE o FALSE también 1 o 0.
Muy buena la clase!!
Para los que están un poco perdidos o tiene ciertas dudas, les recomiendo el curso de fundamentos de bases de datos, de verdad que haberlo hecho antes que este me ha ayudado a tener claridad
Tengo una duda, cual es la diferencia de Create database y Create schema? porque para crear desde un inicio pensé que teniamos que crear un schema…
Pero en dónde estás escribiendo los comandos? son directamente en Mysql? o en visual? no cuesta nada explicar paso por paso, qué pésimo curso
Lo estoy viendo me ha gustado de momento. Pero siento que puedo seguir el hilo porque he visto otro curso de SQL. De no ser así estuviera perdido. Aparte siento que empleo un lenguaje muy tecnico del cual no da ningun tipo de explicación
¿Qué es la variable unsigned?
Le indica a la variable que no va a llevar signo (sin valores negativos)
TINYINT. Permite números desde -128 hasta 127. Si se define como UNSIGNED (sin signo) permite números desde 0 hasta 255.
el código de esta clase, me equivoco menos en minúsculas, me gustaría que el camel case fuese un estándar 😅
create database if not exists platzi_operation;
/*
-if not exists- will help to don't thrown an error if the database
already exists. Instead will create a warning.
To show the previous warnings:
*/
show warnings;
-- change to the new db
use platzi_operation;
-- once changed this will show the current db tables
show tables;
create table if not exists books (
-- unique id per transaction
book_id integer unsigned primary auto_increment,
author ,
-- max 100 chars
title varchar(100) not null,
-- if not data provided, use 1990
year integer unsigned not null default 1900,
--comments doesn't affects to the db at all
language varchar(2) not null default 'es'comment 'ISO 639-1 Language',
cover_url varchar(500),
-- (total_numbers, decimal_numbers) in this case the result is XXXX.YY
price double(6, 2) not null default 10.00,
sellable tinyint(1) default 1,
copies integer unsigned not null 1,
description text
);
/*
cardinality: number of distinct values in a table
column relative to the number of rows in the
table. Repeated values in the column
don't count
*/
Por si a alguien le da error al momento de conectar con visual estudio les dejo un video de como poder realizar la coneccion https://youtu.be/bnW1forz4Sw
no se muestra como acceder a un editor, deberia el profesor tomar un video para explicar que editor esta usando, como lo instalo, como lo conecta a la base de datos porque queda uno en blanco viendo videos sin poder practicar , es como no aprender nada
Tipos de columnas / Creación de la tabla books
CREATE = Comando para crear una base de datos
CREATE database nombre_base_datos;
CREATE DATABASE IF NOT EXISTS nombre_base_datos;
El comando anterior sirve para decirle al programa que cree la base de datos si
esta no existe
SHOW warnigns = sirve para poder ver los errores que me arroje el programa a la hora de
crear una base de datos
CREATE TABLE nombre_tabla ( ); = de esta manera creamos una tabla
Buenas prácticas a la hora de crear el nombre de una tabla:
Debe ser en plural del sustantivo que vamos a utilizar
El nombre de la tabla debe ser en inglés
Necesita un ID la tabla, así podemos reconocer directamente a la tabla que hemos creado
ID de la tabla
Es un valor entero único que se le va a asignar a los datos que guardemos en las tablas
Va a ser siempre la llave primaria
AUTO_INCREMENT nos sirve para aumentar el id_tabla de 1 en 1 automáticamente
AUTO_INCREMENT asigna el valor siguiente acorde al último número asignado que se haya guardado
AUTO_INCREMENT no reconoce cuando un valor anterior se ha borrado y por ende seguirá el conteo en el último valor guardado
UNSIGNED no agrega el signo negativo para los números enteros
El VARCHAR() es un carácter de tipo texto, aquí almacenamos los caracteres que queramos guardar en dichas variables de la base de datos
Podemos poner el límite de caracteres que queremos guardar
El NOT NULL nos sirve para indicar que, si hay una columna vacía y nos indica que debemos poner un valor allí
DEFAULT = si la tabla no encuentra almacenado un dato en la variable, pondrá un valor por defecto el cual puede ser definido por el creador de la tabla, ejemplo
DEFAULT 1945,
COMMENT = son comentarios que se pueden dejar dentro de una variable en la base de datos, pero estos no afectan la operatividad de la base de datos
DOUBLE = es un dato numérico decimal, su estructura es DOUBLE(#1, #2)
En el primero almacena la cantidad de números que va a guardar en la variable y la segunda a partir de donde pone la coma del decimal
TEXT = variable de almacenamiento y guarda texto lo máximo que permita almacenar datos
no puedo avanzar en este curso, no se crea mi base de datos, creo que si no hay uin profesor que te pueda atender se hace mucho mas lento el proceso
Siento que el workbench lo podrían utilizar para no complicarse con el IDE.
muy claro, en su explicación.
No es claro el profesor en la explicacion
Me causa curiosidad que vamos a empezar a crear tablas a saco, sin hacer la lógica de la unión ni los diagramas en papel antes de tocar el código sql
En el lenguaje, se le puede poner solo CHAR(2)
, ya que como tal no sería variable
Hasta ahora muy bien y claro el curso. Estoy aprendiendo cosas nuevas e interesantes. Pero considerando los fundamentos de BD, creo que el instructor debió comenzar a crear las tablas sin llaves foráneas, para así no dejar pendiente el campo author. Pequeña observación. De ahí en más, todo perfecto.
Si se preguntan por el editor pueden usar (notepad++) en windows y crear un archivo con .sql para que el editor les colore automaticamente el codigo.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.