No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de SQL y MySQL

Curso de SQL y MySQL

Alberto Alcocer (Beco)

Alberto Alcocer (Beco)

Tipos de columnas / Creación de la tabla books

8/24
Recursos

Aportes 194

Preguntas 86

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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

Buenas prácticas:

  • El nombre de tabla debería estar en plural.
  • El ID debe estar siempre presente en la tabla.
  • Debería guardarse la URL de la imágen y no un binario en la BD.

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.

  • CREATE DATABASE IF NOT EXISTS
    Sentencia Sql para crear una bases de datos
 /*Crear Bases de datos*/
CREATE DATABASE IF NOT EXISTS platzi_operations DEFAULT CHARSET utf8 ;
  • SHOW DATABASES
    Muestra las bases de datos dentro de nuestros RDBMS significa Relational Database Management System o sistema manejador de bases de datos relacionales.
 /*muestra bases de datos*/
SHOW DATABASES;
  • USE nombre_databases
    Esto permite hacer que el puntero nuestras consola esté dentro de nuestra bases de datos para realizar las consultas o querys a una bases de datos en específico.
 /*Usar bases de datos*/
USE platzi_library;
  • SELECT DATABASE().
    Muestra qué bases de datos está seleccionada para realizar las consultas o querys
/*mostrar bases de datos usada*/
SELECT DATABASE();
  • SHOW TABLES
    Muestra la tablas de una bases de datos.
 /*Mostrar tablas*/
SHOW TABLES;
  • SHOW WARNINGS
    Muestra las advertencia que nos arroja nuestro RDBMS significa Relational Database Management System o sistema manejador de bases de datos relacionales.
/*muestra el mensaje de advertencia*/
SHOW WARNINGS;
  • CREATE TABLE
    Esta sentencia sirve para crear tablas, es buena práctica colocar el nombre de la tablas en sustantivo plural en inglés. la sentencia “IF NOT EXISTS”, nos permite blindar el query para que se un query ok en vez de un query error. Toda tabla necesita un id para identificar de manera única cada tupla.
            /*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
)
;

Hay un error y es que DOUBLE permite una mayor precisión en la cantidad de decimales, que FLOAT

  1. Float es para presición simple en un rango de 4 bytes
  2. Double es para un rango de presición de 8 bytes

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

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.

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.

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:

  1. La sentencia UNSIGNED nos permite quitar el signo de los enteros negativos, por lo cual solo tendremos positivos.
  2. Como buenas practicas la tabla se nombra en plural y sus argumentos en singular y ambos en inglés.
  3. Si se está creando ya sea una base de datos o una tabla seria factible poner en el código
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?

MySql al recibir un valor NULL en una columna NOT NULL

Almacenar imágenes en un abase de datos: En un varchar, la url de donde esta la imagen.

  • CREATE DATABASE IF NOT EXISTS [nombre DB];
  • DROP DATABASE IF EXISTS [nombre BD];

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
);

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.

SHOW warnings; muestra el warning

Cardinalidad: El numero de elementos de un conjunto, en particularidad de esta tabla.

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.

Este es un pequeño cuadro resumen de los distintos Constrains o restricciones que se pueden aplicar en mysql

Les dejo un pequeño cuadro de mi resumen sobre tipo de dato de texto y numérico

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

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

Entiendo que una buena práctica es el uso de las palabras reservadas debe ser en mayúscula cerrada, cierto?

VARCHAR(n)

Las relaciones nos permite obtener mayor informaxion

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;

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.

Creación de tablas

CREATE DATABASE IF NOT EXISTS platzi;
USE platzi;

Buenas prácticas

  • Tablas en plural

  • Atributos en singular

  • Toda tabla necesita una llave primaria

    • Clave única
    • Autoincrementable
    CREATE TABLE IF NOT EXISTS books(
    	book_id INTEGER PRIMARY KEY AUTO_INCREMENT,
    );
    
  • En BD relacionales NO guardar imágenes

    • Guardar link de ubicación

Glosario

  • Cardinalidad: Número de elementos de un conjunto

Sentencias

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
);

Funciones

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 
 );
>
  • create table if not exists mytable, crea una nueva tabla
  • Unsigned, 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.

Está clase me recordo al meme de freddy el de “es imposible” en el minuto 4:27

B

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

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

El tipo de datos bit o boolean sirve para almacenar valores booleanos

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?

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:

  1. Texto:

    • CHAR -> No es dinámico
    • VARCHAR -> Dinámico,
    • TEXT-> Para caracteres más grandes
  2. Numéricos:

    • INTEGER
  • BIGINT
  • SMALLINT
  • DECIMAL
  • NUMERIC

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

Tipos de datos en una base de datos MySQL

  • Numéricos
  • Fecha
  • String

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:
    ->
    ->```

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

¿Cual es el editor de texto que esta usando el profesor?

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…

CREATE TABLE IF NOT EXISTS books ( book\_id INT UNSIGNED AUTO\_INCREMENT PRIMARY KEY, author VARCHAR(255), title VARCHAR(100) NOT NULL, year INT UNSIGNED NOT NULL DEFAULT 1900, language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 language', cover\_url VARCHAR(500), price DOUBLE NOT NULL DEFAULT 10.0, sellable TINYINT DEFAULT 1, copies INT NOT NULL DEFAULT 1, description TEXT ); Aquí dejo la query actualizada, o por lo menos como a mi mysql le ha parecido bien :)
Está mal declarado bastantes cosas
hola tengo un inconveniente y me gustaría poder resolverlo ya tengo instalado mysqlworkbench pero no puedo trabajar desde la terminal escribe mysql -u root -h localhost -p y la respuesta es : Command not found .. me gustaría saber donde esta el error y que es lo que puedo hacer
no supe que era una tulla??
hola como limpio la pantalla de la terminal, estoy en mysql y le pongo exit y no me borra los registros saludos
TABLE: Tabla INTEGER: Número AUTO\_INCREMENT: Número que incrementa a medida que se agrega los registros. VARCHAR(): Texto con cantidad de caracteres language: idioma DOUBLE: Decimal (cantidad de números, cantidad de decimales) TINYINT: Boleano 1 o 0 (True o False) TEXT: Texto

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

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
*/

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