A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Curso de SQL y MySQL

Curso de SQL y MySQL

Alberto Alcocer

Alberto Alcocer

Tipos de columnas / Creaci贸n de la tabla authors

9/24
Recursos

Aportes 150

Preguntas 56

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

7- Tipos de columnas / Creaci贸n de la tabla authors

  1. La tabla de bases datos como se coment贸 anteriormente necesitan una PRIMARY KEY osea un 鈥渋d鈥 para identificar los registros.

  2. Es buena pr谩ctica: MySQL permite min煤sculas y may煤sculas en el nombre de tablas y sentencias sql, pero es recomendable colocar en may煤sculas las sentencias(palabras reservadas) sql y todo lo relaciona con lo propio de MySQL y en min煤scula el nombre de tablas y columnas.

  3. Como la relaci贸n entre tablas es l贸gica y se realiza mediante los id, en la tabla en donde se referencia la columna debe ser del mismo tipo de datos.

  4. El error vs Warnings: la diferencia entre estos dos es que el error rompe cualquier flujo de trabajo que tengamos en nuestra aplicaci贸n mientras que el warnnigs nos muestra una advertencia que no rompe el flujo de trabajo workflow.

  5. DROP TABLE name_table; borra la estructura de la tabla de bases de datos y su contenido

  6. DESCRIBE name_table; muestra la estructura de nuestra tabla. Nos muestra las columnas: field, type, Null, Key, Default, Extra.

  7. DESC name_table; es un acr贸nimo de describe que realiza la misma funci贸n de describir la estructura de la tabla.

  8. SHOW FULL COLUMNS FROM name_table; Esta funci贸n describe la estructura de la bases de datos incluyendo m谩s informaci贸n c贸mo: field, Type, Collation, Null, Key, Default, Extra, Privileges, comment.

  9. Cuando queremos usar una palabra reservada del lenguaje como nombre de alguna columna lo colocamos encerrado entre comillas de acento ejemplo: year.

Creaci贸n de la tabla authors.

CREATE TABLE `authors` (
  `author_id`          int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name`                varchar(100) NOT NULL,
  `nationality`        varchar(100) DEFAULT NULL,
  `active`                TINYINT(1) NOT NULL DEFAULT 1,
  `created_at`       TIMESTAMP  NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at`       TIMESTAMP  NOT NULL DEFAULT CURRENT_TIMESTAMP 
                          ON UPDATE CURRENT_TIMESTAMP,
 
  PRIMARY KEY (`author_id`),
  UNIQUE KEY `uniq_author` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=193 DEFAULT CHARSET=utf8;

-. DROP TABLE name_table;
Es un instrucci贸n que se utiliza para eliminar la estructura de una tabla junto con su informaci贸n

/*Eliminar una tabla*/
DROP TABLE `authors`;

-.DESCRIBE name_table;
Es una instrucci贸n que se utiliza para describir la estructura de una tabla de forma resumida.

/*describe el contenido (columnas) las tabla book*/
DESCRIBE `books`;

-. SHOW FULL COLUMNS FROM name_table;
Es una instrucci贸n que se utiliza para describir la estructura de una tabla junto con sus comentarios y privilegios.

/*describe todo el contenido de la tabla,
como: field, Type data, collaction,
Null, key, Extra, Privileges, coment*/
SHOW FULL COLUMNS FROM `books`;

esto es un aporte para los nuevos que ingresan a este curso: por favor escriban el mismo c贸digo del profesor de esta manera en la consola, para que no tengan problemas, por favor que este muy bien la sintaxis revisen bien antes de ejecutar o les aparecer谩 un error osea me refiero a que escriban muy bien, ah铆 les dejo la imagen espero les haya servido.

En mi caso vengo del curso de fundamentos de db, donde se dice que se debe establecer una relaci贸n por medio de una llave for谩nea, as铆 que dejo el c贸digo.

ALTER TABLE `platzi_operation`.`books` 
ADD CONSTRAINT `author_id`
  FOREIGN KEY (`author_id`)
  REFERENCES `platzi_operation`.`authors` (`author_id`)
  ON DELETE NO ACTION
  ON UPDATE CASCADE;```

tener en cuenta.
| Warning | 1681 | Specifying number of digits for floating point data types is deprecated and will be removed in a future release. | | Warning | 1681 | Integer display width is deprecated and will be removed in a future release.

No se deberia especificar authors_id como Foreign Key? en la tabla de books

Cuando las filas ocupan m谩s de un regl贸n, puedes terminar el comando con \G en lugar de ; para que las filas se muestren en formato vertical.

AQU脥 EL RESULTADO DEL RETO
UNOS CONSEJOS :
1.)SIEMPRE TRATEN DE ESPECIFICAR SI EL CAMPO ES FK O PK SOLO COMO BUENAS PR脕CTICAS
2.) LAS BASES DE DATOS CASI SIEMPRE LAS ESCRIBO CON MAY脷SCULA PARA QUE AL MOMENTO DE HACER CONEXI脫N NO ME EQUIVOQUE CON LOS CAMPOS.
3.) SIEMPRE ANTES DE REALIZAR UNA BASE DE DATOS DEBEN REALIZAR UN MODELADO DE LA MISMA CASI SIEMPRE SE REALIZA 1_MER (MODELO ENTIDAD RELACION)
2_MR (MODELO RELACIONAL)

4.) CADA DATO QUE TENGA UNA TABLA SIEMPRE TRATEN DE ESPECIFICAR DE QUE TABLA VIENE
EJ:
EN LA TABLA CLIENTES Y BOOKS TENEMOS UN ESTADO (ACTIVO O INACTIVO)
LO M脕S CONVENIENTE SER脥A DECLARARLOS AS脥
STATE_CLIENT TINYINT(1) DEFAULT 1 NOT NULL
STATE_BOOK TINYINT(1) DEFAULT 1 NOT NULL
PARA AS脥 ESPECIFICAR DE QUE TABLA SE EST脕 HABLANDO

CREATE TABLE OPERATIONS
(
	OPERATIONS_ID INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    BOOK_ID_FK INTEGER UNSIGNED NOT NULL,
    TYPE_OPERATIONS ENUM('RENTADO','COMPRADO','DEVUELTO') NOT NULL,
    CLIENT_ID_FK INTEGER UNSIGNED NOT NULL,
    DATE_OPERATION DATETIME NOT NULL,
    CREATE_AT_OPERATIONS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP NOT NULL,
    UPDATE_AT_OPERATIONS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,
    STATE_OPERATIONS TINYINT(1) DEFAULT 1 NOT NULL,
    FINISH_OPERATION TINYINT(1) NOT NULL,
    FOREIGN KEY (BOOK_ID_FK) REFERENCES BOOKS (ID_BOOK),
    FOREIGN KEY (CLIENT_ID_FK) REFERENCES CLIENTS (ID_CLIENT)
);

Una forma mas f谩cil de crear las llaves for谩neas, es cuando estamos creando el campo que ser谩 la llave for谩nea.

Pasar铆amos de esto鈥

author_id INTEGER NOT NULL,
FOREIGN KEY (author_id) REFERENCES authors(author_id)

a esto鈥

author_id INTEGER NOT NULL REFERENCES authors(author_id)

y nos ahorramos una linea de c贸digo 馃槈

Les comparto mi codigo para que no les aparescan esos 2 warnings

CREATE TABLE IF NOT EXISTS books (
    book_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    author_id INT UNSIGNED,
    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
);```

Para usar una palabra reservada en el nombre de una columna debemos usar la comilla (`) de esta forma:

 `nombre_columna`

Por ejemplo si queremos usar year, date

CREATE TABLE IF NOT EXISTS books (
book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
author_id INTEGER UNSIGNED,
title VARCHAR(100) NOT NULL,
鈥榶ear鈥 INTEGER UNSIGNED NOT NULL DEFAULT 1900,
鈥榣enguage鈥 VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO 639-1 Language鈥,
鈥榗over_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 authors (
author_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
鈥榥ame鈥 VARCHAR(100) NOT NULL,
nationality VARCHAR(3)
);

buenas tardes les recomiendo el editor de c贸digo Visual Studio Code, para cuando todo esto de armar los querys.

  • Crear database
CREATE DATABASE IF NOT EXISTS operation;
  • Mostrar warnings
SHOW warnings;
  • Crear tablas, con sus columnas
CREATE TABLE IF NOT EXISTS authors (
	author_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(100) NOT NULL,
	nationality VARCHAR(3)
);

CREATE TABLE IF NOT EXISTS books (
    book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    author_id INTEGER UNSIGNED,
    title VARCHAR(100) NOT NULL,
    `year` INTEGER UNSIGNED NOT NULL DEFAULT 0000,
    `lenguage` VARCHAR(2) NOT NULL DEFAULT 'en' 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
);
  • Ver tablas
SHOW tables;

Eliminar una tabla 鈥irrecuperablemente鈥, no usar a menos que sea necesario:

DROP table authors;
  • **Ver **una tabla, es un comando muy 煤til
DESCRIBE authors;
  • Ver una toda la informaci贸n de una tabla, as铆 poder ver tambi茅n los comentarios de esta.

Generalmente la informaci贸n se mostrara desordenada, se >recomienda reducir el zoom

SHOW full columns from books;
  • Si necesitas asignarle un nombre a una columna que sea igual a una palabra reservada,
    como 鈥渄ata鈥, ejemplo:
year INTEGER UNSIGNED NOT NULL DEFAULT 0000

Para esto debes de encerrar a year con acento grave, ejemplo:

`year` INTEGER UNSIGNED NOT NULL DEFAULT 0000,

Al fin me funcion贸 crear la tabla. Mi problema eran las comillas de 麓es麓 e 麓iso 639-1 Language麓
No estoy seguro si las que aparecen ac谩 son las correctas pero prob茅 con otras y funcion贸 despu茅s de muchos Error: ERR_PARSE_ERROR鈥

Est谩 muy aburrido 茅ste curso.

Al asignarle la cantidad de digitos que recibir谩 un int o un double manda warning al parecer ya no es necesario y ser谩 removido en siguientes versiones

Un tips de la clase, cuando el dice una relaci贸n l贸gica, es porque no existe una relaci贸n de Foreign Key. Lo que hace con esto, es tener una relaci贸n de 0 a muchos, es decir un libro puede tener 0 autores o muchos autores. Aunque para este caso solo se podr谩 poner o 0 autores = NULL o 1 autor = author_id. Si se deseara poner m谩s autores de deber铆a romper en una tabla 鈥渄etalle鈥.

Algunas formas de escribir los tipos de datos han cambiado para la las nuevas versiones de MySql.

Deberia entender a este error como que DOUBLE ya no recibir谩 valores en un futuro y que INTEGER ya no se utilizara?

Por qu茅 no usa Foreign Key en author_id cuando crea la tabla books? Se enlazan sin tener que usarla? No veo como hace referencia al author_id sin tener que indicarle tabla y campo de authors.

Sin 谩nimo de hacer hate, las palabras en ingl茅s 鈥渁uthor鈥 y 鈥渁uto鈥 se pronunci谩n al comienzo como si fuera una 鈥渙鈥 (en espa帽ol) no 鈥渁u鈥.

Para los que le sale warnings, es por los parentesis despues de los tipos de datos numericos, al parecer ya no hace falta especificarlos, en futuras versiones ya no se har谩 uso del mismo. 馃槂

CREATE TABLE IF NOT EXISTS books (
    book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    author_id INTEGER UNSIGNED,
    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 NOT NULL DEFAULT 10.00,
    sellable TINYINT DEFAULT 1,
    copies INTEGER NOT NULL DEFAULT 1,
    descripcion TEXT
);

Tupla ser铆a una 鈥渇ila鈥 en SQL

system cls; -> para limpiar el terminal

crear: CREATE database platzi_operation;

CREATE DATABASE IF NOT EXISTS platzi_operation; -> nos mostrar谩 OK pero con un warning (no como un error). Es una condicional para que se ejecute si no existe.

SHOW warnings; -> nos mostrar谩 los errores

SHOW databases; -> me muestra las bases de datos creadas

SELECT DATABASE(); -> Nos muestra la tabla actual

SHOW tables; -> nos muestra las tablas de la BD actual

USE platzi_operation; -> para entrar a la BD indicada

DROP table authors; -> Nos borra la tabla pero no tiene respaldo, es Borrado completo para siempre. Borra la tabla el contenido y la estructura.

describe authors; -> Nos muestra las columnas que tenemos en nuestras tablas.

desc books; -> nos muestra las columnas de la tabla (pero abreviado)

show full columns from books; -> Muestra m谩s columas, incluso los comentarios de COMMENT.

show tables; -> mostrar tablas en esta BD. En este caso me muestra emptyset (no hay datos). Nos dar谩 NULL si no existe la tabla ni el contenido

Los comentarios en SQL se colocan con 鈥溾撯.
Una buena pr谩ctica que es las tablas se llame en PLURAL. Una tabala necesita SI o SI un ID. Ahora amos a crear nuestra nueva tabla:

CREATE TABLE IF NOT EXISTS books (
book_id INTEGER UNSIGNED PRIMARY AUTO_INCREMENT, 鈥 Unisgned no almacena el signo (+ o -, por tanto almaceno positivos). Auto_increment aumetna 1 a 1.
author ,
title VARCHAR(100) NOT NULL, 鈥 Not null nos indica que no puede estar nulo (no hay informaci贸n, no hay nada ni epacios).
year INTEGER UNSIGNED NOT NULL DEFAULT 1900, 鈥 Default si no le mando nada le asigno algo (1900).
language VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO 639-1 Language鈥, 鈥 Podemos a帽adir un comentario y s贸lo lo puede ver el admin
cover_url VARCHAR(500),
price DOUBLE(6,2) NOT NULL DEFAULT 10.0, 鈥 Double almacena n煤meros y dos decimales. Float almacena 6 decimales. en este caso 6 d铆gitos, pero reserva 2 para decimales (4 para n煤meros y 2 decimales = 6)
sellable TINYINT(1) DEFAULT 1, 鈥 Tynyint significado que puede tener 1 o 0
copies INTEGER NOT NULL DEFAULT 1,
description TEXT 鈥 Text mete todo lo que pueda
);

Sin comentarios:

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 鈥榚s鈥 COMMENT 鈥業SO 639-1 Language鈥,
cover_url VARCHAR(500),
price DOUBLE(6,2) NOT NULL DEFAULT 10.0,
sellable INYINT(1) DEFAULT 1,
copies INTEGER NOT NULL DEFAULT 1,
description TEXT
);

CREATE TABLE IF NOT EXISTS authors (
author_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
nationality VARCHAR(3)
);

VARCHAR es un tipo de texto y se debe indicar el nm煤mero m谩ximo de caracteres.
Dato NULO es diferente a algo VAC脥O. Vac铆o, hay algo que es nada (por ejemplo espacios o ning煤n cmampo). Nulo es que no se a almacenado completamente nada.

Vamos a la consola, nos aseguramos de estar en la BD correcta y colocamos el c贸digo.

En consola con SELECT DATABASE() podemos ver en qu茅 base estamos.

SELECT * FROM authors; -> Nos dice qu茅 datos tienen en la tabla

Cuando empleamos nombres reservados del lenguaje SQL podemos hacer lo siguiente: year, colocar backticks para indicarle una cadena que identifica una columna.

poner entre comillas nombre de palabra reservada para poder usarla como nombre de columna.
ej:
CREATE TABLE books (
鈥榶ear鈥 INTERGER UNSIGNED NOT NULL );

La comilla es llamada acento grave y se puede hacer con ALT + 96

Por si alguien esta todavia enredado con la 鈥 para la creacion de tablas en mi caso funciono poner la que se pone donde esta el simbolo de pregunta ?, esto en windows 10 al que le sirva excelente

Un peque帽o aporte鈥

  • Si no quieres estar haciendo copy and paste del c贸digo, guarda tu script en un archivo (ejemplo tablas_libreria.sql).
    Y ejecutalo en la terminal de linux:
$ mysql -u root -p platzi_operation < tablas_libreria.sql

La 鈥榙esventaja鈥 de hacerlo as铆 es que la terminal no nos mostrar谩 el resultado de los queries que ejecutamos en la consola. Para poder ver la salida, tendr铆amos que almacenarla en alg煤n archivo que nos sirva de logger. 隆Puedes ver el curso de terminal linux para profundizar m谩s!

  • Otra opci贸n es que dentro de la terminal de mysql utilices el siguiente comando:
mysql> source ruta/a/tu/archivo/tablas_libreria.sql

Esta mostrar谩 los resultados en la terminal de mysql.

隆Espero que esto les sea de utilidad!

show full columns from books; //muestra todas las columnas (propiedades) de la tabla seleccionada

Comando muy b谩sicos pero a lo largo de la vida y de nuestras profesiones por no practicarlo lo olvidamos

Buenas a alguien le salio estos warnings

Query OK, 0 rows affected, 2 warnings (0.55 sec)


| Warning | 1681 | Specifying number of digits for floating point data types is deprecated and will be removed in a future release. |
| Warning | 1681 | Integer display width is deprecated and will be removed in a future release.

He le铆do muchos comentarios sobre si las llaves for谩neas deben crearse dentro del create table o en una sentencia aparte, tambi茅n que si los nombres de las tablas deben ir en singular o plural.
Y la verdad es que no son reglas, solo son buenas pr谩cticas.

Aqu铆 el c贸digo que funcion贸 sin problema en mi consola.

	CREATE TABLE IF NOT EXISTS books (
		book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
		author_id INTEGER UNSIGNED,
		title VARCHAR(100) NOT NULL,
		`year` INTEGER UNSIGNED NOT NULL DEFAULT 1900,
		language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 693-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 authors (
	author_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(100) NOT  NULL,
	nationality VARCHAR(3)
);

Me encanta los tips que nos da, osea no solo ense帽an a hechar c贸digo, sino un poco de sus experiencia

Excelente profesor, se nota su experiencia y explica de una manera muy detallada pero al grano.

describe authors;
desc books;

馃摑Hay les dejo mis notas espero que les sean 煤tiles

-- 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;
-- Como saber que base de datos estoy usando, RTA:
SELECT DATABASE();
-- Borrar tabla
DROP TABLE books
-- Mostar tablas
SHOW TABLES;
-- Describe los campos de la base de datos
DESCRIBE books
DESC authors
-- Mostar todo el esquema de la tabla (Incluyendo los comentarios)
SHOW FULL COLUMNS FROM books;

-- 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_id INT UNSIGNED ,
  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
);

CREATE TABLE IF NOT EXISTS authors (
  author_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  nationality VARCHAR(3)
);

DROP TABLE: Borrar una tabla, contenido y extructura.

Este curso es de lo mejor! Nos ayuda a tener mejores pr谩cticas en la Base de datos, as铆 como tambi茅n, no acostumbrarse a un IDE para poder interactuar con el Esquema y las tablas
.

Genial, aprendiendo cada d铆a mas, gracias!!

Esos 2 warning no se porque aparecen si lo estoy haciendo todo como el profesor y me da un query ok

No s茅 si a alguien ya le sucedi贸 pero comparto igual:

Yo escrib铆 inicialmente el c贸digo en word, y cuando lo pegaba en la consola me aparec铆a que ten铆a un error en las palabras entrecomilladas, el problema se solucion贸 cuando copie todo el texto en el bloc de notas y remplac茅 las comillas all铆, copi茅 nuevamente a la consola y funcion贸 bien.

el formato de comillas en word es distinto al de el bloc de notas y genera conflicto, no s茅 por qu茅.

esta es la otra tabla

CREATE TABLE IF NOT EXISTS authors(
-> author_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(100) NOT NULL,
-> nationality VARCHAR (3)
-> );

el codigo es de detalles escribien, ojo con la dislexia

CREATE TABLE IF NOT EXISTS books(
-> book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> author_id INTEGER UNSIGNED,
-> title VARCHAR(100) NOT NULL,#NO PERMITE QUE SEA NULO#
-> year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
-> language VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO639-1 Language鈥,
-> cover_url VARCHAR(500),
-> price DOUBLE(6,2) NOT NULL DEFAULT 10.0, #de 6 digitos, 2 seran decimales y los otros cuatro no
-> sellable TINYINT(1) DEFAULT 1,
-> copies INTEGER NOT NULL DEFAULT 1,
-> description TEXT
-> );

Para que sirve UNSIGNED?

Hola Chicos, hay algo que me est谩 inquietando un poco. Tengo entendido que los atributos no pueden llamarse igual en ning煤n caso, ni siquiera cuando estamos exportando una llave primaria de una entidad independiente a su dependiente y 茅sta 煤ltima la recibe como llave foranea; por ejemplo, si su llave primaria se llama: 鈥渁uthor_id鈥 podr铆a considerar que su llave foranea se llame: 鈥渁uthor_id1鈥 o 鈥渁uthor_id_foreign鈥濃 Igual, creo que no es obligaci贸n, pero s铆 una buena pr谩ctica definitivamente

En el archivo que deja el profesor con algunos bloques de codigo para la creacion de tablas, hay un comando que se repite en todas las tablas que expresa lo siguiente:
** Engine = InnoDB 鈥 Este comando lo que indica es que la tabla que se esta creando debe ser 鈥淚nnoDB鈥 ya que todas las tablas por defecto son: MyISAM.

Por otro lado, si se ejecuta esa misma linea de codigo tal cual como esta, hay un Warning 3719 y la forma de solventarlo es cambiando el valor 鈥榰tf8鈥 por 鈥榰tf8mb4鈥, dejo copiado un fragmento de texto extraido de Stack overflow, a su vez dejo el enlace:

"Dado que est谩 utilizando MySQL 8.0, que maneja muy bien las diferencias entre utf8mb3 y utf8mb4 (las versiones 5.5 y 5.6 ten铆an algunas incompatibilidades molestas), veo que la advertencia no es gran cosa.

MySQL 8.0 tiene como valor predeterminado utf8mb4una intercalaci贸n m谩s nueva que la que ten铆a 5.7. Por lo tanto, las bases de datos creadas inicialmente en 8.0 deber铆an estar mejor que en versiones anteriores.

Recomiendo (a todos los usuarios de MySQL) usar utf8mb4. Esto deber铆a funcionar 鈥渕ejor鈥 en el futuro previsible. Si lo hace, evitar谩 la confusi贸n que puede surgir cuando se utf8cambia de significado utf8mb3a utf8mb4."

https://stackoverflow.com/questions/50032196/django-mysql-utf8-is-currently-an-alias-for-the-character-set-utf8mb3-which-w

CREATE TABLE authors (
author_id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name varchar(100) NOT NULL,
nationality varchar(100) DEFAULT NULL,
PRIMARY KEY (author_id),
UNIQUE KEY uniq_author (name)
);

CREE MIS TABLAS INDICANDO LA LLAVE PRIMARIA AL FINAL POR ALGUNA RAZON NO ME DEJA CREAR LA LLAVE PRIMARIA EN EL MOMENTO DE ASIGNARLA AL PRINCIPIO

Aqu铆 les dejo un peque帽o aporte:

Obtener informaci贸n sobre la base de datos Mysql:

show databases; 鈥 Listar todas las bases de datos.
connect [database]; 鈥 Conectarse a esa base de datos.
show tables; 鈥 Listar todas las tablas de una base de datos.
show table status; 鈥 Muestra informaci贸n sobre las tablas de la base de datos.
describe [table]; 鈥 Muestra la estructura de una tabla de la base de datos.

Manejo de bases de datos Mysql:

drop table [table]; 鈥 Elimina la tabla, incluyendo registros y estructura.
drop table if exists [table]; 鈥 Elimina la tabla de la base de datos, pero antes verifica que exista.
truncate table [table]; 鈥 Elimina los registros, pero mantiene la estructura de la tabla.
rename table [table] to [nuevo nombre de tabla]; 鈥 Renombrar una tabla de la base de datos.
Algunos comando 煤tiles para consultas Mysql:

select * from [table] limit [numero]; 鈥 Muestra los registros desde el 1 hasta [numero].
Ej. select * from tabla limit 10; 鈥 Muestra los 10 primeros registros.
select * from [table] limit [numero inicio],[numero]; 鈥 Muestra los registros desde el numero de inicio hasta numero inicio + numero.
Ej. select * from tabla limit 11,10; 鈥 Muestra desde registro 11 hasta el 20.

Super bien explicado

Ya comenc茅 a practicar con mi base de datos 馃槃

Les comparto el c贸digo que esta correcto, lo que pasa es que tenemos que colocar INT en vez de INTEGER.

CREATE TABLE IF NOT EXISTS authors(
author_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
nationality VARCHAR(3)

);
CREATE TABLE IF NOT EXISTS books(
book_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
author_id INT UNSIGNED,
title VARCHAR(100) NOT NULL,
year INT UNSIGNED NOT NULL DEFAULT 1900,
language VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO 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
);

CREATE TABLE IF NOT EXISTS books(
    book_id INTEGER UNSIGNED AUTO_INCREMENT,
    author ,
    title VARCHAR(100) NOT NULL,
    year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
    lenguage VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Lenguage',
    imagen_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
);

NOT NULL permite que un campo no pueda estar sin completar.

INTEGER numero entero
INTEGER UNSIGNED numero entero sin signos, solo pueden ser positivos.

AUTO_INCREMENT: Hace enteros que se auto incrementan,
*Al borrar un dato de MYSQL no lo nota y sigue aumentando n煤meros,
EJEMPLO:
1 2 3 4, si se elimina el 3 no le importa y quedaria 1 2 4

DEFAULT: establecer valor por defecto, y se agrega en caso de que no se le envie algo que lo reemplaze
EJEMPLO:
year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
lenguage VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO 639-1 Lenguage鈥,

VARCHAR(): Definir numero de caracteres que debe tener

La diferencia entre CHAR y VARCHAR es que en el primer tipo de dato se asigna un valor en memoria por defecto
dependiendo el tama帽o de espacios que sean asignados, en cambio,
VARCHAR va llenando esos campos en memoria conforme se tengan los datos en el campo.

COMMENT: Comentario a la columna que solo es visible para quien este manejando la base de datos

Para imagenes asignamos VARCHAR, NOTA: no se guarda la imagen como tal, guardamos el url del origen de la imagen

FLOAT es utilizado para calculos precisos, DOUBLE puede ser aplicado de forma simple a los precios de una libreria (en este caso)

DOUBLE (total numeros, cantidad decimales)
EJEMPLO:
price DOUBLE (6,2) NOT NULL DEFAULT 10.0,

TEXT permite agregar texto, grandes cantidades de caracteres

TINYINT: Num茅rico que admite solo 鈥1鈥 o 鈥0鈥, tambi茅n llamado bandera.

No se que ten pedag贸gico es ense帽ar desde la consola y no desde la aplicaci贸n de mysql. No todos tenemos mac ni la consola de bash de linux.
Aparte una vez que aprendes a usar la aplicaci贸n es dif铆cil volver a usar a la usar la consola, ya que es muy poco intuitiva

Resumen

Cuando creamos dos tablas con el mismo nombre, la consola mostrar谩 鈥淨uery OK. 鈥 1 WARNING鈥 esto denota un problema.

Por lo tanto, debemos borrar una tabla.

Podemos utilizar el comando DROP. 脡ste eliminar谩 las tablas sin vuelta de hoja.

El comando describe <nombre de la tabla; nos indicar谩 cu谩les son las columnas de nuestra tabla

En algunos casos es conveniente usar GraveAcent para que no exista conflicto con las palabras reservadas. ejemplo:
`int鈥 int unsigned

Buenos dias, hoy es22/1/2021 y la verdad he perdido mucho tiempo " creando estas dos tablas" a los nuevos como yo tengan especial cuidado en la sintaxis y en particular en el uso de palabras reservadas, minuto 10.40 del video, tuve problemas al querer hacerlo "paso a paso y me consumi贸 mucho tiempo, el c贸digo que funciono es:

<CREATE TABLE IF NOT EXISTS books (
book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
author_id INTEGER UNSIGNED,
title VARCHAR(100) NOT NULL,
`year` INTEGER UNSIGNED NOT NULL DEFAULT 1900,
language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Laguage', 
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 
);>

Definitivamente si no has tomado el curso de Fundamentos de bases de datos y has llegado hasta aqu铆 sin conocimientos previos, mis respetos 馃ぃ.

CREATE TABLE books(
book_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
autor_id INT UNSIGNED,
title VARCHAR(100) NOT NULL,
year INT UNSIGNER NOT NULL DEFAULT 1900,
Language VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO 639-1 Language鈥,
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
);
no se que hacer me sale el siguiente error y no lo veo :

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 鈥楿NSIGNER NOT NULL DEFAULT 1900,
Language VARCHAR(2) NOT NULL DEFAULT ?es? COMME鈥 at line 5
mysql>

Hola! Me pegu茅 en el curso por que me da error la terminal 馃槮 Comparto el mensaje que me tira.

![]( Espero su ayuda, soy super nuevo en este mundo.

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`)
) ENGINE=InnoDB AUTO_INCREMENT=199 DEFAULT CHARSET=utf8;```

Me est谩 saliendo el Warning 1681, me dice que los FLOATING POINT DATA TYPES y los INTEGER DISPLAY are deprecated and will be removed in a future release, he buscado el problema pero no le encuentro soluci贸n, alguien ayuda?

10. drop table authors; //borra la tabla seleccionada
11. describe authors; // ayuda y muestra propiedades de una tabla (tambien se puede utilizar "desc books;")

Siempre usaba MySQL Workbench pero ahora le hago caso al profe y lo hago con mi IDE (Atom). Aunque me gusta la amigabilidad de Workbench para visualizar las tablas.

hay algunos querys en SQL SERVER que no funcionan igual. cuales seria sus equivalentes? por ejemplo show, describe鈥 Gracias 馃槂

Muy bien explicado.

DESCRIBE cada una de las columnas de la tabla.

Comando DESCRIBE se puede escribir tambi茅n con su acr贸nimo DESC

A su vez DESCRIBE es acr贸nimo de SHOW FULL COLUMNS FROM este comando adem谩s mostrar谩 los comentarios de la tabla, privilegios y juego de caracteres (Collation).

La columna price, no recomendar铆a colocarla en 10.0 si no en 0.00 porque a manera de reporte en alg煤n momento se requiera conocer por ejemplo cuanto valen o suman todos los libros por ejemplo el 10.0 alterar铆a mi resultado.

excelente curso

buenas clases

Me agrada la idea de relacionar campos de manera l贸gica.
Es un enfoque que tiene el framework laravel, no te obliga a hacer las relaciones de las tablas con constraints o references.

Pero en una opini贸n personal, deber铆a aparecer la relaci贸n tal cual en la descripci贸n de las tablas.

No logr茅 comprender la utilidad del UNSIGNED. 驴Cu谩l es su funci贸n?

Alberto Alcocer.
Muy bien detallado lo que va del curso. Excelentemente.
Tambi茅n hiciste el de consola de Linux, no? Ah铆 s铆 te falt贸 un poco m谩s de parsimonia. Ojal谩 que lo puedas hacer de nuevo, pero tan bien como este curso de MySQL 馃槈

Listas la sprimeras tablas

drop table tabla; -- mucho cuidado
describe tabla;
desc tabla;
show full columns from books; -- mas detalle"
create table if not exists books 
(
book_id int UNSIGNED primary key auto_increment,
author_id int unsigned,
title varchar(100) not null,
year int  unsigned not null default 2000,
laguage 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 int not null default 1,
description text
);

create table if not exists authors
(
author_id int unsigned primary key auto_increment,
name varchar(100) not null,
nationality varchar(3)
);```
CREATE TABLE IF NOT EXISTS `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`)
) ENGINE=InnoDB AUTO_INCREMENT=199 DEFAULT CHARSET=utf8;```

EXCELENTE CURSO

Vaina siempre me daba error porque dejaba una 鈥,鈥 en el 煤ltimo elemento antes del );

He venido teniendo problemas de sintaxis a煤n utilizando los mismos comandos y siguiendo los pasos del instructor. Que puede estar sucediendo? Por ejemplo , me est谩 tomando los par茅ntesis como error

haber conocido describe antes!

Una pregunta comunidad porque en el archivo adjunto el codigo es diferente al del video鈥
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 鈥業SO 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)
) ENGINE=InnoDB AUTO_INCREMENT=199 DEFAULT CHARSET=utf8;

Las tres ultimas lineas del codigo no las entiendo鈥

Cambiar nombre de un campo de la tabla

EJEMPLO:

alter table books change author author_id INTEGER UNSIGNED;

QUERY OK

CREATE TABLE IF NOT EXIST books (卢
book_id INTEGER UNSIGNED PRIMARY AUTO_INCREMENT,
卢 autor ,卢
title VARCHAR(100) NOT NULL, 卢
year INTEGER UNSIGNED NOT NULL DEFAULT 1900, 卢
language VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO 639-1 Lange鈥, 卢
cover_url VARCHARD(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,
author_id INTEGER UNSIGNED,
title VARCHAR(100) NOT NULL,
year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
language VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO 639-1 Languege鈥,
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 authors (
author_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
nationality VARCHAR(3)
);

CREATE TABLE IF NOT EXISTS books (
		book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
		author_id INTEGER UNSIGNED,
		title VARCHAR(100) NOT NULL,
		`year`INTEGER UNSIGNED NOT NULL DEFAULT 1900,
		language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 693-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
	);```

La comilla inversa, en teclado de ordenador windows se saca con ALT + 96

CREATE TABLE IF NOT EXISTS books (
book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
author_id INTEGER UNSIGNED,
title VARCHAR(100) NOT NULL,
year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
language VARCHAR(2) NOT NULL DEFAULT 鈥榚s鈥 COMMENT 鈥業SO 639-1 Languege鈥,
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
);

Todo va quedando muy claro.

La relaci贸n de las tablas es l贸gica.

buena pr谩ctica: MySQL permite min煤sculas y may煤sculas en el nombre de tablas y sentencias sql, pero es recomendable colocar en may煤sculas las sentencias(palabras reservadas) sql y todo lo relaciona con lo propio de MySQL y en min煤scula el nombre de tablas y columnas

Como la relaci贸n entre tablas es l贸gica y se realiza mediante los id, en la tabla en d贸nde se referencia la columna debe ser del mismo tipo de datos

Hola, Porque me sale este error?
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 鈥樷 at line 1

Mi codigo es este:

CREATE TABLE IF NOT EXISTS books (
	book_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    author_id INTEGER UNSIGNED, 
    title VARCHAR(100) NOT NULL, #NO PERMITE QUE SEA NULO#
    year INTEGER UNSIGNED NOT NULL DEFAULT 1900,
	language VARCHAR(2) NOT NULL DEFAULT 'es' COMMENT 'ISO 639-1 Language',
    cover_url VARCHAR(500), #Este es el url de la imagen de portada*/
    price DOUBLE(6,2) NOT NULL DEFAULT 10.0, #de 6 digitos, 2 seran decimales y los otros 4 no
    sellable TINYINT(1) DEFAULT 1,
    copies INTEGER NOT NULL DEFAULT 1,
    description TEXT
);

hola soy nuevo en esto, pero no entiendo como de mysql se paso a hacer columnas en editor de texto que no menciona el nombre de que esta usando, alguien que me comente y ayude

DROP TABLE nombre_tabla; //Borra la tabla: contenido y estructura.

describe nombre_tabla;

desc nombre_tabla;

卤------------卤-----------------卤-----卤----卤--------卤---------------+
| Field | Type | Null | Key | Default | Extra |
卤------------卤-----------------卤-----卤----卤--------卤---------------+
| authorId | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| nationality | varchar(3) | YES | | NULL | |
卤------------卤-----------------卤-----卤----卤--------卤---------------+

show full columns from books;

script de la clase

que quiere decir una bandera buleana

No veo que se crearon la relacion entre la tabla authors y books.

tengo esta duda, espero me puedan ayudar, la descripci贸n que se genera aqu铆 puede funcionar igual que el diccionario de datos?
o en su defecto es otro?

驴C贸mo luce un error en mysql?

SHOW WARNNIGS; muestra las advertencias