sábado, 14 de marzo de 2020

MYSQL

¿Que es el cotejamiento en MySql?

UTF-8 es una codificación de caracteres que usa la mayoría de los sitios web. Codifica cada uno de los 1,112,064 puntos de código válidos.

Resultado de imagen de ¿Que es el cotejamiento en MySql?



CREAR UNA BASE DE DATOS


  1. 1 Acceder a mysql desde la consola.
  2. Crear una nueva base de datos.
  3. 3 Seleccionar la base de datos a usar.
  4. Crear una tabla en la base de datos.
  5. 5 Comprobar la tabla creada.
  6. 6 Añadir algunos registros.
  7. 7 Comprobar los datos.

Este es un vídeo que lo explica



CREAR UNA TABLA

 Le da click a nuevo crea una base de datos luego le da a la base de datos y saldra un cuadro diciendo crear tabla y ponen los datos que van a utilizar




CREAR LAS RELACIONES ENTRE TABLAS

  • Las tablas que se van a relacionar tienen que ser tipo InnoDb(InnoDB es el primer tipo de tabla que permite definir estricciones de claves foráneas para garantizar la integridad de los datos).
  • Usar sintaxis FOREIGN KEY (campo_fk) REFERENCES nombre_tabla(nombre_campo)
  • Crear un gndice en el campo que ha sido declarado claveforánea

Resultado de imagen de CREAR LAS RELACIONES ENTRE TABLAS en msql



CREAR USUARIOS Y DARLE PERMISOS

1. Creación de la base de datos

mysql> CREATE DATABASE `mibd`;

2. Creación del usuario

mysql> CREATE USER 'miusuario' IDENTIFIED BY 'mipassword';

3. Conceder permisos para poder acceder y usar el servidor MySQL

Para sólo permitir el acceso local desde el propio servidor (localhost). Esta será la configuración más segura y más habitual que usaremos para una aplicación web:
mysql> GRANT USAGE ON *.* TO 'miusuario'@localhost IDENTIFIED BY 'mipassword';
Para permitir el acceso desde cualquier otra máquina que tenga acceso al servidor MySQL desde la red:
mysql> GRANT USAGE ON *.* TO 'miusuario'@'%' IDENTIFIED BY 'mipassword';

4. Conceder todos los privilegios sobre la base de datos al usuario

mysql> GRANT ALL privileges ON `mibd`.* TO 'miusuario'@localhost;
Al igual que en punto anterior, si queremos que el usuario pueda trabajar con la base de datos desde cualquier ubicación tendremos que sustituir localhost por ‘%’.

5. Aplicar los cambios realizados

Para que sean efectivos los nuevos permisos que hemos asignado debemos finalizar con el siguiente comando:
mysql> FLUSH PRIVILEGES;

6. Verificar que nuestro nuevo usuario tiene los permisos correctos

mysql> SHOW GRANTS FOR 'miusuario'@localhost;     
+--------------------------------------------------------------+ 
| Grants for miusuario@localhost                                | 
+--------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'miusuario'@'localhost'                 | 
| GRANT ALL PRIVILEGES ON `mibd`.* TO 'miusuario'@'localhost' | 
+--------------------------------------------------------------+ 
2 rows in set (0,00 sec)
Si nos hemos equivocado en algún punto podemos deshacer todos los pasos ejecutando los siguientes comandos, teniendo la precaución de sustituir localhost por ‘%’ si también lo cambiaste en los pasos anteriores:
DROP USER miusuario@localhost;
DROP DATABASE midb;


GRANT

Los comandos GRANT y REVOKE permiten a los adminitradores de sistemas crear cuentas de usuario MySQL y darles permisos y quitarlos de las cuentas.


Resultado de imagen de que es GRANT en mysql


Permiso para crear usuario

Para que nosotros generemos un nuevo usuario lo primero que debemos de hacer es autenticarnos en el servidor.
mysql -u root -p -h localhost<ip>
Posteriormente debemos de generar un nuevo Usuario, Para esto ejecutamos las siguiente sentencia.
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'password';
Hasta este punto, nosotros ya podemos autenticarnos con el servidor utilizando el nuevo usuario, sin embargo, una vez autenticado las acciones que podemos hacer son mínimas, debido a que este usuario no posee los permisos necesarios para trabajar con las bases de datos.












Permisos a nivel global(describir subconceptos)

  • Para que otorgar un permiso a este nivel, hay que indicar: ON *.* en la cláusula grant.
  • La sintaxis básica para dar permisos a nivel del gestor Mysql, incluyendo los permisos administrativos sería:
1 
GRANT SELECT ON *.* TO 'user1'@'localhost'
Nota: Si el usuario ya está conectado cuando se realiza el cambio de permisos, no serán aplicados. El usuario necesita cerrar la conexión y volver a abrirla.
En este ejemplo, estaríamos dando permiso de selección sobre todas las tablas de todas las bases de datos, al usuario 'user1' conectado desde host 'localhost'.
Recordar que esta sentencia se traducirá en una orden INSERT sobre la tabla mysql.user.
Mysql grantrevoke 3.jpg

















Permisos a nivel de bases de datos(describir subconceptos)


  • Recordar que a este nivel, los permisos son filas que se añaden, borran o se modifican en la tabla mysql.db, y se aplican en una base de datos concreta.
  • A este nivel, la sintaxis para otorgar un permiso es la siguiente:
1 
GRANT ALL ON mydb.* TO 'someuser'@'somehost';
2
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';
Con GRANT ALL estamos otorgando todos los privilegios a este nivel.
Fijarse como se indica el nombre de la base de datos: GRANT SELECT ON mydb.* TO 'someuser'@'somehost';
  • Los privilegios que pueden ser especificados a nivel de base de datos:
  • SELECT, UPDATE, INSERT, INSERT
  • CREATE: Permite crear tablas.
  • DROP: Elimina una tabla.
  • ALTER: Modifica una tabla. Es necesario tener el privilegio 'CREATE'.
  • EVENT: Permite crear, eliminar o modificar eventos que pueden ser programados en el servidor Mysql.
  • LOCK TABLES: Permite 'bloquear' una tabla impidiendo que ningún usuario pueda realizar operaciones sobre la misma e incluso impidiendo que puedan leerla. Es necesario tener el permiso SELECT sobre la misma tabla para poder bloquearla.
  • REFERENCES: Para poder crear una regla de clave foránea al crear una tabla.
  • Los privilegios relacionados con la gestión de procedimientos almacenados y funciones (routines) pueden ser aplicados a nivel general y a nivel de base de datos. En este último caso, sólo se permitiría crear/modificar (incluye borrado) procedimientos/funciones dentro de la base de datos indicada.
1 
GRANT CREATE ROUTINE, ALTER ROUTINE ON mydb.* TO 'someuser'@'somehost';
Indicar que en el caso de las rutinas, no existe el permiso DROP ROUTINE. Si posee el permiso ALTER ROUTINE puede modificar o borrar una rutina.
  • GRANT OPTION: Otorgamos privilegios a un usuario y dicho usuario puede otorgar esos mismos privilegios a otros usuarios.
1 
GRANT CREATE ROUTINE, ALTER ROUTINE
2
ON mydb.*
3
TO 'someuser'@'somehost'
4
WITH GRANT OPTION;



Permisos a nivel de tabla(describir subconceptos

  • Recordar que a este nivel, los permisos son filas que se añaden, borran o se modifican en la tabla mysql.tables_priv, y se aplican en una base de datos concreta y en una tabla concreta.
  • 1 
    GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';
    2
    GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';
  • Los privilegios que pueden ser aplicados a este nivel:

  • Privilegios que gestionan tablas:
  • CREATE: Mysql permite dar permiso para crear una tabla concreta, incluso si esta no existe.
  • ALTER: Mysql permite dar permiso para modificar una tabla concreta, incluso si esta no existe.
  • DROP: Mysql permite dar permiso para eliminar una tabla concreta, incluso si esta no existe.
  • Privilegios que manejan datos de la tabla:
  • DELETE
  • SELECT
  • UPDATE
  • INSERT
Estos privilegios se aplican a todas las columnas de una tabla determinada.
  • Privilegios que manejan vistas (visiones externas de una base de datos):
  • CREATE VIEW
  • SHOW VIEW
Para borrar una vista o modificarla, se necesita el permiso DROP.
  • Otros privilegios:
  • GRANT OPTION: Otorgamos privilegios a un usuario y dicho usuario puede otorgar esos mismos privilegios a otros usuarios.
  • INDEX: Permite crear o borrar índices sobre una tabla.
  • REFERENCES: Para poder crear una regla de clave foránea al crear una tabla.
  • TRIGGER: Permite crear, borrar, modificar y mostrar triggers.


Permisos a nivel de columnas(describir subconceptos)

  • Recordar que a este nivel, los permisos son filas que se añaden, borran o se modifcan en la tabla mysql.columns_priv, y se aplican en una base de datos concreta, en una tabla concreta y una columna concreta de esa tabla. Recordar que también se modifica la tabla mysql.tables_priv.
1 GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';
  • Los privilegios que pueden ser aplicados a este nivel:
  • INSERT
  • REFERENCES: Para poder crear una regla de clave foránea al crear una tabla.
  • SELECT
  • UPDATE


Permisos sobre rutinas (proc.almacenados/funciones) (describir subconceptos)

  • Recordar que a este nivel, los permisos son filas que se añaden, borran o se modifcan en la tabla mysql.procs_priv table (cuando otorgamos permiso sobre una rutina concreta),mysql.user (todas las rutinas de todas las bases de datos) y mysql.db (todas las rutinas de una base de datos concreta).
1 
GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
2
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';
  • Los privilegios que pueden ser aplicados a este nivel:
  • Aplicables a cualquier rutina:
  • ALTER ROUTINE (incluye borrado)
  • CREATE ROUTINE
  • EXECUTE
  • GRANT OPTION
  • Aplicados a una rutina concreta:
  • ALTER ROUTINE
  • EXECUTE
  • GRANT OPTION



TIPOS DE DATOS NUMÉRICOS

Existen tipos de datos numéricos, que se pueden dividir en dos grandes grupos, los que están en coma flotante (con decimales) y los que no.


TINYINT

Es un número entero con o sin signo. Con signo el rango de valores válidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255

Resultado de imagen de que es TINYINT




SMALLINT

Número entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535.

Resultado de imagen de que es TINYINT




MEDIUMINT

Número entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215.

Resultado de imagen de que es TINYINT




INT

Número entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295.

Resultado de imagen de int mysql



INTEGER

Número entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295

Resultado de imagen de interger mysql




BIGINT

Número entero con o sin signo. Con signo el rango de valores va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615.

Resultado de imagen de interger mysql




FLOAT(X)

Número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.

Resultado de imagen de interger mysql




FLOAT

Número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.

Resultado de imagen de interger mysql




DOUBLE

permite almacenar grandes números decimales (de punto flotante).
Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales (decimal).
DOUBLE(5,1) tendrá 4 dígitos enteros y 1 dígito decimal, por ejemplo, 5467.1

Resultado de imagen de interger mysql













DOUBLE PRECISION

Número en coma flotante de precisión doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308

Resultado de imagen de interger mysql




REAL

Número en coma flotante de precisión doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308

Resultado de imagen de interger mysql














DECIMAL(M,D

Número en coma flotante desempaquetado. El número se almacena como una cadena

Resultado de imagen de interger mysql



NUMERIC(M,D)

Número en coma flotante desempaquetado. El número se almacena como una cadena

Resultado de imagen de interger mysql





TIPOS DE DATOS FECHA

A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es válida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el día esta comprendido entre 0 y 31.

Date

Tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de año-mes-día.

DateTime

Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-día horas:minutos:segundos.

TimeStamp

Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:

Tamaño
Formato
14
AñoMesDiaHoraMinutoSegundo aaaammddhhmmss
12
AñoMesDiaHoraMinutoSegundo aammddhhmmss
8
ñoMesDia aaaammdd
6
AñoMesDia aammdd
4
AñoMes aamm
2
Año aa


Time

Almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'.

Year

Almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos.

Tipo de Campo
Tamaño de Almacenamiento
DATE
3 bytes
DATETIME
8 bytes
TIMESTAMP
4 bytes
TIME
3 bytes
YEAR
1 byte


TIPOS DE DATOS de cadena

Char(n)

Almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres.
VarChar(n)

Almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres.

Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los tipo BLOB (Binary large Object)

La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar ordenamientos y comparaciones. Mientras que el tipo test se ordena sin tener en cuenta las Mayúsculas y las minúsculas, el tipo BLOB se ordena teniéndolas en cuenta.

Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.
TinyText y TinyBlob

Columna con una longitud máxima de 255 caracteres.
Blob y Text

Un texto con un máximo de 65535 caracteres.
MediumBlob y MediumText

Un texto con un máximo de 16.777.215 caracteres.
LongBlob y LongText

Un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicación los paquetes pueden tener un máximo de 16 Mb.
Enum

Campo que puede tener un único valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos
Set

Un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.

Tipo de campo
Tamaño de Almacenamiento
CHAR(n)
n bytes
VARCHAR(n)
n +1 bytes
TINYBLOB, TINYTEXT
Longitud+1 bytes
BLOB, TEXT
Longitud +2 bytes
MEDIUMBLOB, MEDIUMTEXT
Longitud +3 bytes
LONGBLOB, LONGTEXT
Longitud +4 bytes
ENUM('value1','value2',...)
1 ó dos bytes dependiendo del número de valores
SET('value1','value2',...)
1, 2, 3, 4 ó 8 bytes, dependiendo del número de valores


Diferencia de almacenamiento entre los tipos Char y VarChar

 Dado que es un tipo de longitud fija, al momento de almacenar datos en una columna CHAR, se rellenará con espacios en blanco las posiciones que no son ocupadas por los caracteres de la cadena que se está almacenando, caracteres que se eliminan cuando el dato es recuperado.


Valor
CHAR(4)
Almace
namiento
VARCHAR(4)
Almace
namiento
''
''
4 bytes
"
1 byte
'ab'
'ab '
4 bytes
'ab'
3 bytes
'abcd'
'abcd'
4 bytes
'abcd'
 
'abcdefgh'
'abcd'
4 bytes
'abcd'
5 bytes


MYSQL

¿Que es el cotejamiento en MySql? UTF-8 es una codificación de caracteres que usa la mayoría de los sitios web. Codifica cada uno de lo...