Você está na página 1de 9

By [Ark]

Sintaxis MySQL
CONECTAR CON EL SERVIDOR MYSQL shell> mysql -h Nombre_Servidor -u Nombre_Usuario -p Nombre_BD shell> mysql -h localhost -u root p base1 Enter password: ******

PARA DESCONECTARSE USAREMOS LA SENTENCIA mysql> [exit | quit]

LISTAR VERSION, FECHA, USUARIO Y SERVIDOR mysql> SELECT VERSION (), CURRENT_DATE, USER (), NOW ();

EXPRESIONES MATEMETICAS Y TRIGONOMETRICAS mysql> SELECT SIN (PI ()/4), (4+1)*5;

VISUALIZAR LAS BD EXISTENTES EN EL SERVIDOR Se debe anotar tambin que es posible que no veamos todas las bases de datos si no tenemos el privilegio SHOW DATABASES mysql> SHOW DATABASES;

CREAR UNA BASE DE DATOS mysql> CREATE DATABASE [IF NOT EXISTS] Nombre_BD; mysql> CREATE DATABASE base1;

ELIMINACION DE UNA BASE DE DATOS mysql> DROP DATABASE [IF EXISTS] db_name

LISAR TODAS LAS TABLAS DE UNA BD mysql> SHOW TABLES;

By [Ark]

CAMBIAR DE BD mysql> USE Nombre_BD mysql> USE base1; Database changed CREAR UNA TABLA CON CAMPOS mysql> CREATE TABLE nombre_tabla ( campo1 VARCHAR (20), campo2 VARCHAR (20), campo3 VARCHAR (20), campo4 CHAR (1), campo5 DATE, campo6 DATE ); mysql> CREATE TABLE tabla1 ( nombre VARCHAR (20), prop VARCHAR (20), sexo CHAR (1), nacimiento DATE, fallecimiento DATE );

LISTAR EL TIPO Y EL NOMBRE DE LOS CAMPOS mysql> DESCRIBE nombre_tabla; mysql> DESCRIBE tabla1; DAR PERMISOS mysql> GRANT ALL ON Nombre_BD.* TO Usuario@Computadora IDENTIFIED BY 'Passwd'; mysql> GRANT ALL ON base1.* TO nacho@localhost IDENTIFIED BY '1234'; ESPECIFICAR UN PASSWORD PARA EL USUARIO ROOT shell> mysql -u root mysql mysql> SET PASSWORD FOR root=PASSWORD('new_password'); OTRA FORMA PUEDE SER USANDO EL PROGRAMA MYSQLADMIN shell> mysqladmin -u root password new_password shell> mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY '1234' WITH GRANT OPTION; mysql> GRANT ,INSERT,UPDATE,DELETE,CREATE,DROP ON *.* TO monty@"%" IDENTIFIED BY '1234' WITH GRANT OPTION; mysql> GRANT RELOAD, PROCESS ON *.* TO admin@localhost; mysql> GRANT USAGE ON *.* TO dummy@localhost;

By [Ark]

ENCRIPTACION DEL PASSWORD Si se desea dar acceso a un usuario especifico desde cualquier maquina en un dominio dado, se puede usar tanto la clusula GRANT como INSERT de la siguiente forma: mysql> GRANT ... ON *.* TO nombre_user@"%.nombre_de_dominio" IDENTIFIED BY 'password';

En algunos casos se debe usar la funcin PASSWORD () para encriptar este. Esto es porque la tabla user almacena los passwords en forma encriptada, no como un texto plano. Se debe usar la funcin PASSWORD () cuando se usa la clusula SET PASSWORD: mysql> SET PASSWORD FOR nacho@"%" = PASSWORD('1234');

LA SENTENCIA REVOKE La sentencia REVOKE es usada para rescindir los privilegios que han sido previamente otorgados a un usuario. mysql> REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name ...] REVOKE ALL PRIVILEGES ON tabla1.* FROM nacho@localhost;

mysql>

Seguridad Como comentamos anteriormente, todo el sistema de permisos MySQL lo guarda en una base de datos llamada mysql, la cul se componen de cinco tablas: host, user, db, tables_priv, colums_priv.

user contiene informacin sobre los usuarios, desde que mquinas pueden acceder a nuestro servidor MySQL, su clave y de sus diferentes permisos. host nos informa sobre que mquinas podrn acceder a nuestro sistema, as como a las bases de datos que tendrn acceso y sus diferentes permisos. tables_priv: es similar a la tabla db aunque su rango es inferior, ya que permite especificar permisos para tablas concretas dentro de bases de datos. En esta tabla, el campo Table_name es el nombre de la tabla de la base de datos. Grantor contiene el nombre de la persona que ha concedido los permisos y Table_priv los permisos para la tabla. columns_priv: permite especificar permisos para ciertas columnas de tablas determinadas. En el campo Column_priv controlamos el grado de acceso del usuario a esa columna.

Las tablas estn relacionadas entre si, y por ejemplo un usuario autorizado con carcter global no podr acceder desde una concreta maquina que tenga prohibido o restringido el acceso en la tabla host, de la misma forma que desde una maquina autorizada en host no podr acceder un usuario que expresamente no este autorizado en user. Un usuario sin permisos globales puede ver modalizados sus privilegios para una base concreta en la tabla db.

By [Ark]

By [Ark]

PRIVILEGIOS PROPORCIONADOS POR MYSQL

PRIVILEGIOS COLUMNA select Select_priv insert Insert_priv update Update_priv delete Delete_priv index Index_priv alter Alter_priv create Create_priv drop Drop_priv grant Grant_priv reload Reload_priv shutdown Shutdown_priv process Process_priv file File_priv

CONTEXTO tablas tablas tablas tablas tablas tablas base de datos,tablas o indexes base de datos o tablas base de datos o tablas administracion del servidor administracion del servidor administracion del servidor acceso de archivos al servidor

CREAR VISTAS El usuario que ejecuta la vista, debe tener acceso a la lectura de la tabla. Ejemplo: crear una vista sobre una tabla creada en la base de datos base1: USE base1; CREATE TABLE alumnos ( idalumno INT(6) NOT NULL auto_increment PRIMARY KEY, nombre VARCHAR(100) default NULL, apellidos VARCHAR(100) default NULL, ) TYPE=MyISAM; CREATE OR REPLACE VIEW vista1 AS SELECT nombre, apellidos FROM alumnos; OTRAS POSIBILIDADES SOBRE VISTAS # DROP VIEW v CASCADE; CREATE VIEW v AS SELECT column1 AS c FROM t; INSERT INTO v VALUES (1); SELECT * FROM v; #

Si utilizas una versin anterior, usa las tablas temporales para crearte "vistas": DROP TEMPORARY TABLE IF EXISTS vista1; # puedes utilizar RESTRICT o CASCADE CREATE TEMPORARY TABLE vista1 ( nombre VARCHAR(100) default NULL, apellidos VARCHAR(100) default NULL ); SELECT * FROM vista1 VISUALIZAR LOS INDICES DE UNA TABLA

By [Ark]

mysql> SHOW INDEX FROM nombre_tabla [FROM nombre_bd]; mysql> SHOW INDEX FROM tabla1; La salida que proporciona esta sentencia pueden ser: Table ==> Nombre de la tabla Non_unique ==> 0 si el index no contiene duplicados. Key_name ==> Nombre del index Seq_in_index ==> Numero de secuencia en la columna en index, comienza en 1. Column_name ==> Nombre de la columna. Collation ==> Ordenado de la columna en el index. En *MySQL*, estos valores son `A' (Ascending) o `NULL' (No ordenado). Cardinality ==> Numero de valores nicos en el index. Se actualiza con `isamchk -a'. Sub_part ==> Numero de caracteres indexados si la columna esta parcialmente indexada. `NULL' si la key esta indexada completamente.

CREACION DE INDICES ORDINARIOS (Permiten duplicados) mysql> CREATE INDEX nombreIndice ON nombreTabla(campo1 [,campo2...]); mysql> ALTER TABLE nombreTabla ADD INDEX [nombreIndice] (campo1 [,campo2...]); mysql> CREATE INDEX indice1 ON tabla1; mysql> ALTER TABLA tabla1 ADD INDEX indice1;

CREACION DE CLAVE PRIMARIA EN UNA TABLA EXISTENTE (nico y no nulo) mysql> ALTER TABLE nombreTabla ADD PRIMARY KEY(campo1 [,campo2...]); mysql> ALTER TABLE tabla1 ADD PRIMARY KEY;

CREAR EL NDICE UNA VEZ QUE HA SIDO CREADA LA TABLA mysql> ALTER TABLE nombreTabla ADD FULTEXT [nombreIndice] (campo1 [,campo2,...]); mysql> ALTER TABLE tabla1 ADD FULTEXT indice1;

CREACION DE INDICES UNICOS (No se permiten duplicados) mysql> CREATE TABLE nombreTabla(campo1 tipoDato,..) UNIQUE [nombreIndice] (campo1 [,campo2...]));

SI LA TABLA YA EXISTE mysql> CREATE UNIQUE INDEX nombreIndice ON nombreTabla(campo1 [,campo2...]); mysql> ALTER TABLE nombreTabla ADD UNIQUE [nombreIndice] (campo1, campo2) ...

PARA ELIMINAR UN NDICE DE CLAVE PRIMARIA mysql> ALTER TABLE nombreTabla DROP PRIMARY KEY;

By [Ark]

PARA ELIMINAR UN NDICE ORDINARIO, NICO, O DE TEXTO COMPLETO, mysql> ALTER TABLE nombreTabla DROP INDEX nombreIndice; mysql> DROP INDEX nombreIndice ON nombreTabla;

VISUALIZA EN NOMBRE DEL INDICE mysql> SHOW KEYS FROM nombreTabla;

EJ: CREACION
mysql> CREATE TABLE usuarios ( Id INT NOT, nombre VARCHAR(50) NOT NULL, apellidos VARCHAR(70) NOT NULL, PRIMARY KEY (id), INDEX (nombre, apellidos) ); EJ: ELIMINACION mysql> ALTER TABLE usuarios DROP PRIMARY KEY; mysql> ALTER TABLE usuarios DROP INDEX nombre;

PARA LA OBTENCIN DE INFORMACION SOBRE TABLAS, COLUMNAS,... SHOW SHOW SHOW SHOW SHOW SHOW SHOW DATABASES [LIKE wild] TABLES [FROM db_name] [LIKE wild] COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] INDEX FROM tbl_name [FROM db_name] STATUS VARIABLES [LIKE wild] PROCESSLIST

CARGANDO DATOS EN UNA TABLA Para el uso de la sentencia LOAD DATA, hemos de crearnos un archivo de texto que contenga un registro por linea para cada uno de nuestros campos de la tabla. Por tanto, debemos de crear un archivo de texto "tabla1.txt" que contenga un registro por linea con valores separados por tabuladores, cuidando que el orden de las columnas sea el mismo que utilizamos en la sentencia CREATE TABLE. Para valores que no conozcamos podemos usar valores nulos (NULL). Para representar estos valores en nuestro archivo debemos usar \N.

INGRESO DE MUCHOS DATOS EN UNA TABLA mysql> LOAD DATA LOCAL INFILE "nombre_archivo.txt" INTO TABLE nombre_tabla; mysql> LOAD DATA LOCAL INFILE "tabla1.txt" INTO TABLE tabla1;

By [Ark]

INSERTAR CAMPOS 1 A 1 mysql> INSERT INTO nombre_tabla VALUES(campo1, campo2, campo3, campo4....); mysql> INSERT INTO tabla1 VALUES('pesa','Diana','Hamster','f','2000-03-30',NULL); Es un hecho que no siempre estamos en la posibilidad de insertar los datos a partir de un archivo de texto, sin embargo, podemos acelerar las operaciones INSERT que son hechas con mltiples sentencias al bloquear nuestras tablas: LOCK TABLES nombreTabla WRITE; INSERT INTO nombreTabla VALUES(registro1),(registro2),(registro3); INSERT INTO nombreTabla VALUES(registro4),(registro5),(registro6); ... INSERT INTO nombreTabla VALUES(registroN); UNLOCK TABLES;

ELIMINACION DE DATOS DE UNA TABLA mysql> DELETE FROM nombre_tabla; mysql> DELETE FROM user WHERE user = "nacho";

ACTUALIZACION DE DATOS DE UNA TABLA mysql> UPDATE nombreCampo FROM nombreTabla WHERE condicion; mysql> UPDATE mascotas SET nacimiento="1989-08-31" WHERE nombre="Kaiser";

SELECCIN DE DATOS DE UNA TABLA mysql> SELECT nombreCampo FROM nombreTabla WHERE algunaCondicion; mysql> SELECT * FROM tabla1; RECUPERANDO INFORMACION DE UNA TABLA mysql> SELECT informacin_deseada FROM Nombre_tabla WHERE codicion; mysql> SELECT nombre FROM tabla1 WHERE nombre=nacho; mysql> SELECT ciudad, pais FROM usuarios WHERE nombre="nacho"; mysql> SELECT * FROM mascotas WHERE especie="Perro" AND sexo="f"; mysql> SELECT * FROM mascotas WHERE especie = "Ave" OR especie = "Gato"; mysql> SELECT * FROM mascotas WHERE (especie = "Gato" AND sexo = "m")

By [Ark]

ORDENANDO LOS CAMPOS -> ORDER BY <mysql> SELECT nombre_campos FROM tablas ORDER BY nombre_campo; mysql> SELECT nombre, nacimiento FROM mascotas ORDER BY nacimiento;

ORDENAR EN ORDEN INVERSO -> DESC <mysql> SELECT nombre_campos FROM nombre_tablas ORDER BY nombre_campo DESC; mysql> SELECT nombre, nacimiento FROM mascotas ORDER BY nacimiento DESC;

SELECIONAR LOS CAMPOS PERO SIN REPETICIONES -> DISTINCT <mysql> SELECT DISTINCT nombre_campo FROM nombre_tabla; mysql> SELECT DISTINCT propietario FROM mascotas;

TRABAJANDO CON VALORES NULOS Conceptualmente, NULL significa un valor que hace falta, o un valor desconocido, y es tratado de una manera diferente a otros valores. Para verificar si un valor es NULL no podemos usar los operadores de comparacion tales como =, > o <. mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL; mysql> SELECT 1 IS NULL, 1 IS NOT NULL; En MySQL, 0 o NULL significan falso y cualquier otro valor significa verdadero. El valor que se considera verdadero por default es 1. Cuando se usa un ORDER BY, los valores NULL son siempre ordenados primero, aun cuando se use la clausula DESC. PARA ENCONTRAR LOS NOMBRES QUE COMIENZAN CON B mysql> SELECT * FROM mascotas WHERE nombre LIKE "b%";

El carcter punto (.) coincide con cualquier carcter. Una clase de caracteres [...] coincide con cualquier carcter dentro de los parntesis cuadrados. Por ejemplo, [abc] coincide con a, b o c. Para nombrar un rango de caracteres, se usa el guin. [a-z] coincide con cualquier letra minscula, mientras que [0-9] coincide con cualquier digito. El carcter asterisco (*) coincide con cero o mas instancias de lo que le preceda. Por ejemplo, x* coincide con cualquier numero de caracteres x, [0-9]* coincide con cualquier numero de dgitos, y .* (punto asterisco) coincide con cualquier cosa. Para indicar el inicio o el final de un valor que esta siendo evaluado se usan los caracteres ^ y $ respectivamente.

CONTAR EL NUMEROS REGISTROS DE UNA TABLA mysql> SELECT COUNT(*) FROM nombre_tabla; mysql> SELECT propietario, COUNT(*) FROM mascotas GROUP BY propietario;