¿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.
CREAR UNA BASE DE DATOS
- 1 Acceder a mysql desde la consola.
- 2 Crear una nueva base de datos.
- 3 Seleccionar la base de datos a usar.
- 4 Crear una tabla en la base de datos.
- 5 Comprobar la tabla creada.
- 6 Añadir algunos registros.
- 7 Comprobar los datos.
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
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.
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.
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';2GRANT 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 ROUTINE2ON mydb.*3TO 'someuser'@'somehost'4WITH 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';2GRANT 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';2GRANT 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
- 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.
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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
- 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
- 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
- DECIMAL(M,D
- Número en coma flotante desempaquetado. El número se almacena como una cadena
- NUMERIC(M,D)
- Número en coma flotante desempaquetado. El número se almacena como una cadena
- 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
- TamañoFormato14AñoMesDiaHoraMinutoSegundo aaaammddhhmmss12AñoMesDiaHoraMinutoSegundo aammddhhmmss8ñoMesDia aaaammdd6AñoMesDia aammdd4AñoMes aamm2Año aaTimeAlmacena 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'.
- YearAlmacena 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 CampoTamaño de AlmacenamientoDATE3 bytesDATETIME8 bytesTIMESTAMP4 bytesTIME3 bytesYEAR1 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)
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 campoTamaño de AlmacenamientoCHAR(n)n bytesVARCHAR(n)n +1 bytesTINYBLOB, TINYTEXTLongitud+1 bytesBLOB, TEXTLongitud +2 bytesMEDIUMBLOB, MEDIUMTEXTLongitud +3 bytesLONGBLOB, LONGTEXTLongitud +4 bytesENUM('value1','value2',...)1 ó dos bytes dependiendo del número de valoresSET('value1','value2',...)1, 2, 3, 4 ó 8 bytes, dependiendo del número de valoresDiferencia 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.
- ValorCHAR(4)Almace
namientoVARCHAR(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