Sei sulla pagina 1di 15

CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

&8562'(0<64/

 ,QWURGXFFLyQD0\64/"

MySQL es un servidor de Base de Datos multiusuario y es cliente/servidor que consta de


un daemon en el servidor llamado mysqld y muchos programas clientes y diferentes
bibliotecas.

Las metas principales de MySQL son rapidez, robustez y facilidad de uso. Se desarrolló
desde 1979, originalmente porque TcX requería un servidor SQL que debía manejar base
de datos muy grandes en un orden de magnitud más rápido que cualquier vendedor de
base de datos podría ofrecernos. TcX esta usando MySQL 1.0 desde 1996 en un
ambiente con más de 40 bases de datos que contienen 10.000 tablas, de los cuales más
de 500 tienen más de 7 millones de registros. Esto es aproximadamente 100 gigabytes de
datos.

La base en el cual se construye MySQL es un conjunto de rutinas que se han usado en un


ambiente de producción muy exigente por muchos años. Aunque MySQL sigue en proceso
de desarrollo, ya ofrece un conjunto de funciones muy rica y muy útil.

 3ODWDIRUPDV\/HQJXDMHV$3,6

Las versiones iniciales trabajaban en Unix y Solaris. Ahora MySQL esta disponible en:
UNÍX, Linux, OS2, Solaris, SunOS, HP-UX, SCO OpenServer,Win95, Win98, win2000 y
Win NT entre otros.

Las primeras versiones solo incluían a C y a PERL. Ahora se pueden usar las siguientes
APIs: C, C++,CommonLisp, Delphi, Eiffel, Java, PHP, Python, ODBC, Perl y otros.

 &DUDFWHUtVWLFDVSULQFLSDOHVGH0\64/

• Totalmente multi-threaded, esto significa que puede usar multiples CPU’s sin
poblemas.
• Presenta multilples APIs como ser C, C++, Java, Perl, Delphi, ODBC y otros.
• Trabaja con diferentes plataformas como Linux, OS/2, Solaris, SunOS, Windows
95/98, Windows NT entre otros.
1
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

• Tiene muchos tipos de columnas: enteros de 1,2,3,4 y 8 bytes de tamaño, FLOAT,


DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME,
TIMESTAMP, YEAR, SET Y ENUM.
• Las funciones SQL son implementados a través de librerías altamente optimizadas.
• Soporta distintas funciones en las sentencias WHERE y SELECT.
• Puede mezclar tablas de diferentes bases de datos en la misma consulta.
• Los sistemas de Password y privilegios son bastante flexibles y seguros, los cuales
permiten verificación de host.
• MySQL tiene su driver ODBC (Open-DataBase-Connectivity) para trabajar sobre
Windows95 o Windows NT. De esa manera una aplicación como Delphi, C++
Builder, Excel, FoxPro, Paradox, Pawerbuilder, Visual C++, Access, Visual Basic
puede conectarse a MySql.
• Son permitidos16 índices por tabla. Cada índice puede tener de 1 a 15 columnas. El
tamaño máximo de un índice es de 256 bytes.
• Maneja grandes bases de datos. TcX usa MySQL con base de datos que contienen
50.000.000 registros.
• Todas las columnas tienen valores por defecto.
• Tiene un sistema de asignación de memoria muy rápido, basado en Thread.
• Incluye myisamchk, un utilitario muy rápido para verificar, optimizar y reparar las
tablas de una base de datos.
• Se puede usar alias sobre tablas y columnas.
• DELETE, INSERT, REPLACE y UPDATE retornan el numero de filas que han sido
afectadas.
• Los nombres de funciones no tienen conflicto con nombres de columnas y tablas.
Por ejemplo, ABS es una nombre de columna válida. La única restricción es que
para llamar a una función, no esta permitido dejar ningún espacio entre el nombre
de la función y el ‘(‘ que sigue.
• Todos los programas de MySQL se pueden invocar con las opciones --help or
-? para obtener ayuda online.
• Los clientes se conectan al servidor MySQL por conexiones TCP/ IP o Unix sockets,
o named pipes bajo NT.
• El comando SHOW puede ser usado para obtener informacion de base de datos,
tablas e indices. El comando EXPLAIN puede ser usado para determinar como
optimizar las consultas.
• El código de MySQL es poco redundante.
• Los algoritmos usan bastante cache, si existe disponibilidad de memoria.
• MySQL ha realizado muchas optimizaciones para maximizar la velocidad:
• • Muchos joins son hechos en una sola barrida.

2
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

• • Muy pocos joins requieren tablas temporales.


• • Usa algoritmos de búsquedas binarias.
• • Usa librerías altamente optimizadas.

%UHYHDQDOLVLVGH0\64/

/HQJXDMHGHPDQLSXODFLyQGHGDWRV\GHILQLFLyQGHGDWRV

6HQWHQFLDVTXHQRHVWiQLPSOHPHQWDGDVHQ0\64/
• Sub-selects
• Select into table
• Triggers
• Transacciones
• Foreign key
• Views

7LSRVGHFROXPQDV

Los nombres de bases de datos y tablas son case-sensitivity en Uníx y no son en caso de
Windows. Los nombres de las columnas no son case-sensitivity, en cambio los nombres
de los alias de tablas son case-sensitivity.

MySQL soporta varios tipos de columnas agrupados en tres categorías: Numéricas, Fecha
y Hora, y Cadenas. A continuación se describe los tipos de columnasZ:

Numéricos
TINYINT[(M)] Entero con signo entre –128 a l 127. Entero
[UNSIGNED][ZEROFILL] positivo 0 a 255.
SAMLLINT[(M)][UNSIGNED][ Entero con signo entre –32768 al 32767.
ZEROFILL] Entero positivo 0 a 65535.
MEDIUMINT[(M)][UNSIGNED] Entero con signo entre –8388608 al 8388607.
[ZEROFILL] Entero positivo 0 a 16777215.
M: Indica el máximo tamaño que se despliega, que es 255.
D: Se aplica a los tipos decimales e indica al numero de dígitos depuse del punto decimal.
[]: Indica que es opcional.
3
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

[ZEROFILL] Entero positivo 0 a 16777215.


INT[(M)][UNSIGNED][ZEROFI Entero con signo entre –2147483648 al
LL] 2147483647. Entero positivo 0 a 4294967295.
INTEGER[(M)][UNSIGNED][Z Sinónimo de INT.
EROFILL]
BIGINT[(M)][UNSIGNED][ZER Entero con signo entre –
OFILL] 9223372036854775808 al
9223372036854775807. Entero positivo 0 a
18446744073709551615.
FLOAT(presicion) [ZEROFILL] Precisión puede ser 4 o 8. FLOAT(4) es un
numero con simple precisión, FLOAT(8) es un
numero con doble precisión.
FLOAT[(M,D)][ZEROFILL] Es un numero decimal con simple precisión.
DOUBLE [(M,D)][ZEROFILL] Es un numero decimal con doble precisión.
REAL[(M,D)][ZEROFILL] Sinónimo del DOUBLE.
DECIMAL(M,D) [ZEROFILL] Es un numero decimal cuyo rango máximo es
igual a DOUBLE, pero el cual esta definido por
los valores de M y D. Es almacenado como
una cadena de caracteres, usando un carácter
para cada digito, para el punto decimal y para
el signo.
NUMERIC(M,D)[ZEROFILL] Es sinónimo de DECIMAL.

Fechas y Horas
DATE Fecha que soporta entre el año ‘1000-01-01’ a
’9999-12-31’.
DATETIME Combinación de fecha y hora. El rango que
soporta es entre ‘1000-01-01 00:00:00’ al ‘9999-
12-31 23:59:59’.
TIMESTAMP[(M)] Es un tiempo sellado, cuyo formato puede ser
YYYYMMDDHHMMSS, YYMMDDHHMMSS,
YYYYMMDD o YYMMDD dependiendo si M es
14, 12, 8 o 6. Este tipo de dato es útil para
insertar o actualizar un registro con la fecha y
hora de la operación de forma automática sin
necesidad de hacerlo manualmente.
TIME Es la hora que se muestra en el formato
‘HH:MM:SS’
4
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

YEAR Es un año. Los valores permitidos es entre 1901


al 2155, y 0000.

Cadenas
CHAR(M)[BINARY] El rango de M esta entre 1 y 255 caracteres.
Los valores de este tipo son almacenados y
comparados sin hacer diferencia entre
mayúsculas y minúsculas, al menos que se
especifique como BINARY.
VARCHAR(M) [BINARY] Es una cadena variable. El rango de M es entre
1 y 255 caracteres. Los valores de este tipo son
almacenados y comparados sin hacer
diferencia entre mayúsculas y minúsculas, al
menos que se especifique como BINARY.
TINYBLOB, TINYTEXT Texto con un máximo tamaño de 255
caracteres.
BLOB, TEXT Texto con un máximo tamaño de 65535
caracteres.
MEDIUMBLOB, Texto con un máximo tamaño de 16777215
MEDIUMTEXT caracteres.
LONGBLOB, LONGTEXT Texto con un máximo tamaño de 4294967295
caracteres.
ENUM (‘valor1’,’valor2’,...) Permite elegir un único valor de la lista de
valores o NULL. Este tipo de campo permite
tener como máximo 65535 distintos valores.
SET(‘’valor1,’valor2’,…) Este tipo de campo puede tener cero o mas
valores, cada uno de los cuales es elegido de la
lista de valores. Este tipo tiene un máximo de 64
miembros.

)XQFLRQHVPDWHPiWLFDV

ABS(X): Retorna el valor absoluto de X.


SIGN(N,M): Retorna –1,0 o 1 según X sea un valor negativo, cero o positivo
respectivamente.
MOD(N,M): Retorna el resto de la división de N entre M.
FLOOR(X); Retorna el entero más grande que X.
CEILING(X): Retorna el entero más pequeño que X.
5
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

ROUND(X): Retorna el argumento de X, redondeando a un entero.


ROUND(X,D): Retorna el argumento de X, redondeando el numero con D decimales.
EXP(X): Retorna el valor exponencial de X.
LOG(X): Retorna el logaritmo natural de X.
POW(X,Y): Retorna el resultado de X elevado a la potencia Y.
SQRT(X): Retorna la raiz cuadrada de X.
PI(): Retorna el valor de PI.
COS(X), SEN(X), TAN(X), COT(X): Retorna el coseno, seno, tangente o cotangente de X,
donde X esta en radianes.
ACOS(X), ASIN(X), ATAN(X): Retorna el arcocoseno, arcoseno o el arcotangente de X.
En caso del arcocoseno y arcoseno retorna NULL si no esta en el rango de -1 y 1.
LEAST(X, Y,...): Retorna el argumento mas pequeño, dependiendo si se trata en un
contexto de enteros, reales o cadena de caracteres.
GREATEST(X,Y,….): Retorna el valor mas grande, dependiendo si se trata en un contexto
de enteros, reales o cadena de caracteres.
DEGREES(X): Retorna el argumento X convertido de radianes a grados.
RADIANS(X): Retorna el argumento X convertido de grados a radianes.
TRUNCATE(X,D): Retorna el numero X, tomando solo D decimales.

)XQFLRQHVFRQFDGHQDV

ASCII(str): Retorna el código ASCII del carácter izquierdo de str. Retorna 0 si se trata de
una cadena vacia. Retorna NULL si str es NULL.
CONV(N, from_base, to_base): Convierte el valor N de una base a otra. Retorna Null si
cualquiera de los argumentos es NULL. La base minimamente es 2 y máximo es 36.
BIN(N), OCT(N), HEX(N): Retorna el valor binario, octal o hexadecimal del valor N
respectivamente. Si N es NULL el resultado es NULL.
CONCAT(X,Y,...): Retorna una cadena que es el resultado de la concatenacion de los
argumentos. Retorna NULL si cualquiera de los argumentos es NULL. Debe existir mas de
2 argumentos.
LENGHT(str): Retorna el tamaño de cadena str.
LOCATE(substr, str)
POSITION(substr IN str): Retorna la posición de la primera ocurrencia de la cadena
substr encontrada en str, empezando de la posición pos. Retorna 0 si no lo encuentra.
INSTR(str, substr): Retorna la posición de la primera ocurrencia de la cadena substr
encontrada en str. Retorna 0 si no lo encuentra.
LPAD(str, len, padstr): Retorna la cadena str, rellenado por la izquierda con la cadena
padstr hasta que str tenga una longitud len.

6
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

RPAD(str, len, padstr): Retorna la cadena str, rellenado por la derecha con la cadena
padstr hasta que str tenga una longitud len.
LEFT(str,len): Retorna la parte izquierda de la cadena str, la cantidad de len caracteres.
RIGHT(str,len)
SUBSTRING(str FROM len): Retorna la parte derecha de la cadena str, la cantidad de len
caracteres.
SUBSTRING (str, pos, len)
MID(str,pos,len)
SUBSTRING(str FROM pos FOR len): Retorna una subcadena del tamaño len de la
cadena str, empezando de la posición pos.
SUBSTRING(str,pos): Retorna una subcadena de la cadena str empezando de la
posición pos.
SUBSTRING_INDEX(str, delim, count): Retorna una subcadena de la cadena str
después de count de ocurrencias delimitados por delim. Si count es positivo, se cuenta del
principio al final. Si count es negativo, se cuenta de la derecha hacia el principio.
LTRIM(str): Retorna la cadena str borrando los espacios de la parte izquierda de la
cadena.
RTRIM(str): Retorna la cadena str borrando los espacios de la parte derecha de la
cadena.
SPACE(N): Retorna una cadena formada por N espacios en blanco.
REPLACE(str, from_str,to_str): Retorna la cadena str con todas las ocurrencias de la
cadena from_str reemplazadas por la cadena to_str.
REPEAT(str,count):Retorna una cadena que resulta de repetir la cadena str por count
veces. Si count menor 0 igual a cero retorna una cadena vacia. Retorna el valor NULL si
str o count son NULL.
REVERSE(str): Retorna la cadena str ordenando los caracteres en forma inversa.
INSERT(str, pos, len, newstr): Retorna la cadena str , con la subcadena empezando
desde la posición pos y el tamaño len de caracteres reemplazada por la cadena newstr.
FIND_IN_SET(str,strlist):Retorna el valor de 1 a N si la cadena str esta en la lista de
cadenas strlist que contiene N subcadenas. Una lista de cadenas es una cadena
compuesta de subcadenas separadas por ‘,’. strlist puede ser columnas del tipo SET. Esta
función retorna 0 si str no se encuentra en strlist o si strlist esta vacia. Retorna NULL si
cualquiera de los argumentos es NULL.
LCASE(str)
LOWER(str): Retorna la cadena str con todos sus caracteres cambiados a minúsculas.
UCASE(str)
UPPER(str): Retorna la cadena str con todos sus caracteres cambiados a mayúsculas.
LOAD_FILE(nombre_arch): Lee el archivo y retorna el contenido del archivo como una
cadena. El archivo debe estar en el servidor y se debe especificar la ruta donde se

7
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

encuentra el archivo. El archivo debe tener los permisos de lectura . Si por alguna razón
no puede ser leído el archivo la función retorna NULL.

)XQFLRQHVFRQIHFKDV\KRUDV

DAYOFWEEK(date): Retorna el índice del día de la semana de la fecha date.


(1=Domingo, 2=Lunes,...7=Sábado).
WEEKDAY(date): Retorna el índice del día de la semana que corresponde a date
(0=Lunes, 1=Martes,...6=Domingo).
DAYOFMONTH(date): Retorna el día del MES de la fecha date, en un rango de 1 al 31.
DAYOFYEAR(date): Retorna el día del año de la fecha date, en un rango del 1 al 366.
MONTH(date): Retorna el mes para la fecha date, en un rango del 1 al 12.
DAYNAME(date): Retorna el nombre del día de la semana de la fecha date.
MONTHNAME(date): Retorna el nombre del mes de la fecha date.
QUARTER(date): Retorna el cuarto del año de la fecha date, en el rango del 1 al 4.
WEEK(date)
WEEK(date, first): Retorna la semana de la fecha date, en un rango de 0 al 52, para los
lugares donde Domingo es el primer día de la semana. El argumento first permite
especificar si la semana empieza con Domingo o Lunes, con los valores 0 o 1
respectivamente.
YEAR(date):
HOUR(time), MINUTE(time), SECOND(time): Retorna la hora el minuto o el segundo de
la hora time, en un rango de 0 al 23 para la hora, 0 al 59 para los minutos y 0 al 59 para
los segundos.
PERIOD_ADD(P,N): Añade N meses al periodo P (en el formato YYMM o YYYYMM).
Retorna el valor en el formato YYYYMM.
DATE_ADD(date, INTERVAL expr type)
DATE_SUB(date, INTERVAL expr type): Permiten realizar operaciones aritméticas con
fechas. date es del tipo DATE o DATETIME. expr es una cadena que especifica el
intervalo que se añade o resta de la fecha date. type indica como va a ser interpretada la
expresión expr.
TO_DAYS(date): Retorna el numero de días desde el año 0 que tiene la fecha date.
FROM_DAYS(N): Retorna la fecha que corresponde a los dias N.
DATE_FORMAT(date, format): Retorna una cadena con el formato de fecha que se
especifica en format de la fecha date.
TIME_FORMAT(time, format): Retorna una cadena con el formato de la hora que se
especifica en format de la hora time. Esta función solo trabaja con horas, de otra forma
retorna el valor 0.
CURDATE()
8
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

CURRENT_DATE: Retorna la fecha del día en el formato ‘YYYY-MM-DD’ o


‘YYYYMMMDD’, dependiendo si la función es empleada en el contexto de cadena o
numérico.
CURTIME()
CURRENT_TIME: Retorna la hora actual en el formato ‘HH:MM:SS’ o ‘HHMMSS’,
dependiendo si la función es empleada en el contexto de cadena o numérico.
NOW()
SYSDATE()
CURREWNT_TIMESTAMP: Retorna la fecha y hora actual en el formato ‘YYYY-MM-DD
HH:MM:SS’ o ‘YYYYMMMDDHHMMSS’, dependiendo si la función es empleada en el
contexto de cadena o numérico.
SEC_TO_TIME(seconds): Convierte los segundos seconds a horas, minutos y segundos
en el formato ‘HH:MM:SS’ o ‘HHMMSS’ dependiendo si la funcion se esa en el formato de
cadena o numérico.
TIME_TO_SEC(time): Convierte la hora time en segundos.

)XQFLRQHVXVDGDVFRQODVHQWHQFLD*5283%<

COUNT(expr): Retorna la cantidad de registros no nulos obtenidos en la sentencia


SELECT.
AVG(expr): Retorna el promedio de expr.
MIN(expr) y MAX(expr): Retorna el valor minimo y máximo de expr.
SUM(expr): Retorna la sumatoria de expr.
STD(expr): Retorna la desviación estandar de expr.

 6LQWD[LVSDUDDGPLQLVWUDU%DVHGH'DWRV7DEODVHËQGLFHV

CREATE DATABASE: Crear una base de datos.

CREATE DATABASE Nombre_Base

DROP DATABASE: Borra todas las tablas de la base de datos y la base de datos.

DROP DATABASE [IF EXISTS] Nombre_Base

9
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

CREATE TABLE: Crear una tabla.


CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...)

create_definition:
col_name type [NOT NULL | NULL]
[DEFAULT default_value] [AUTO_INCREMENT]
[PRIMARY KEY] [reference_definition]
or PRIMARY KEY (index_col_name,...)
or KEY [index_name] KEY(index_col_name,...)
or INDEX [index_name] (index_col_name,...)
or UNIQUE [INDEX] [index_name] (index_col_name,...)

ALTER TABLE: Permite cambiar la estructura de tablas existentes en una base de datos.

ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec...]

alter_specification:
ADD [COLUMN] create_definition [FIRST | AFTER column_name ] or ADD
INDEX [index_name] (index_col_name,...)
or ADD PRIMARY KEY (index_col_name,...)
or ADD UNIQUE [index_name] (index_col_name,...)
or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} or CHANGE
[COLUMN] old_col_name create_definition
or MODIFY [COLUMN] create_definition
or DROP [COLUMN] col_name
or DROP PRIMARY KEY
or DROP INDEX key_name
or RENAME [AS] new_tbl_name
or table_option

DROP TABLE: Permite borrar una o mas tablas existentes en una base de datos.
DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]

DELETE: Borra todas las filas de la tabla que se especifica que cumplan la cláusula una o
mas tablas existentes en una base de datos.

DELETE [LOW_PRIORITY] FROM tbl_name


[WHERE where_definition] [LIMIT rows]

SELECT: Retorna las filas seleccionadas de las tablas especificadas. No es necesario


hacer la consulta de alguna tabla.

10
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

SELECT [DISTINCT | ALL] select_expression,...


[FROM table_references]
[WHERE where_definition]
[GROUP BY col_name,...]
[HAVING having_definition]
[ORDER BY {unsigned_integer | col_name} [ASC | DESC] ,...]

La sentencia SELECT también se puede usar para exportar los datos de la base a un
archivo texto, de la siguiente manera:

SELECT [DISTINCT | ALL] select_expression,...


INTO OUTFILE ‘nombre_archivo’
[FIELDS
[TERMINATED BY '\t']
[OPTIONALLY] ENCLOSED BY "]
[ESCAPED BY '\\' ]]
[LINES TERMINATED BY '\n']

JOIN: Permite unir dos tablas con uno o varios campos en común.

table1 [CROSS] JOIN table2


table1 STRAIGHT_JOIN table2
table1 LEFT [OUTER] JOIN table2 ON conditional_expr
table1 LEFT [OUTER] JOIN table2 USING (column_list)
table1 NATURAL LEFT [OUTER] JOIN table2

INSERT: Inserta nuevos registros en una tabla existente.

INSERT [LOW_PRIORITY | DELAYED] [IGNORE][INTO] tbl_name [(col_name,...)]


VALUES (expression,...),(...),...

or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name


[(col_name,...)] SELECT ...

or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name


SET col_name=expression, col_name=expression, ...

LOAD DATA INFILE: Lee los registros de un archivo texto para insertarlos en un tabla, a
una velocidad alta.
LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY '\t']
[OPTIONALLY] ENCLOSED BY "]
[ESCAPED BY '\\' ]]
11
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

[LINES TERMINATED BY '\n']


[IGNORE number LINES]
[(col_name,...)]

UPDATE: Permite actualizar registros de una tabla, que cumplan la condición de la sentencia WHERE.

UPDATE [LOW_PRIORITY] tbl_name SET col_name1=expr1,col_name2=expr2,...


[WHERE where_definition]

SHOW: Muestra información acerca de Base de Datos,tablas, columnas, índices y otra información
adicional.

SHOW DATABASES [LIKE wild]


or SHOW TABLES [FROM db_name] [LIKE wild]
or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild]
or SHOW INDEX FROM tbl_name [FROM db_name]
or SHOW STATUS
or SHOW VARIABLES [LIKE wild]
or SHOW PROCESSLIST
or SHOW TABLE STATUS [FROM db_name] [LIKE wild]

 6LVWHPDGHSULYLOHJLRVSDUDHODFFHVRD0\64/

Un usuario MySQL cuenta con un login y un password, los cuales le permiten acceder al
servidor.

El nombre de usuario MySQL, login, puede tener hasta 16 caracteres de longitud. MySQL
encripta los passwords usando diferentes algoritmos (por ejemplo: funciones password() y
encrypt()).

&RQH[LyQDOVHUYLGRU0\64/
Los programas cliente de MySQL especifican los parámetros de conexión para acceder al
servidor MySQL. Éstos parámetros son: el host donde se encuentra el servidor (por
defecto es localhost), el puerto de conexión, el nombre de usuario y su password. Los
parámetros de conexión son los siguientes:

shell> mysql [-h host_name] [-u user_name] [-pyour_pass]

Las formas alternativas a las opciones de -h, -u y -p son:

shell> mysql --host=host_name --user=user_name --password=your_pass.


12
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

3ULYLOHJLRVSURYLVWRVSRUP\VTO
Los privilegios asignados a los usuarios son almacenados en las tablas: user, db, host,
tables_priv, y columns_priv en la base de datos mysql. El servidor lee el contenido de
estas tablas cuando inicializa o se apaga.

El resto de los privilegios se usan para funciones administrativas, usando el programa


mysqladmin. La tabla siguiente muestra los comandos que puede ejecutar con el
programa mysqladmin:

Privilegios Comandos ejecutados en la administración del sistema

reload reload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables


Shutdown shutdown
process Processlist, kill

El comando reload le dice al servidor que vuelva a leer las tablas de mysql. El comando
refresh actualiza todas las tablas. Flush-privileges es sinónimo de reload. Los otros
comandos flush-* ejecutan funciones similares al refresh pero limitados a su entorno.

¿Cómo trabaja el sistema de privilegios?


El sistema de privilegios de MySQL asegura que todos los usuarios pueden hacer las
cosas que se supone le son permitidas hacer. Cuando un usuario se conecta al servidor
MySQL, su identidad es determinada por el host por el cual se está conectando y el
nombre de usuario que se especifica. El sistema concede privilegios según su identidad.

El servidor usa las tablas user, db y host de mysql para el acceso.

En las tablas user, db y host todos los campos son declarados como ENUM(‘N’,’Y’) por
defecto toman el valor “N”. Las tablas tables_priv y columns_priv son declaradas como
un conjunto de campos.( 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant',
'References', 'Index', 'Alter')

13
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

Inicializando los privilegios de acceso a mysql


Después de instalar MySQL se debe inicializar los privilegios de acceso ejecutando el
script scripts/mysql_install_db.

Al inicializarse las grandes tablas, éstas contienen los siguientes usuarios:


Un usuario root que tiene todos los privilegios. Este usuario no tiene password.
Un usuario nobody que tiene acceso al servidor sobre una base de datos “test”, creada al
momento de instalar MySQL.

Una de las primeras cosas que se debe hacer es otorgar password al root.
1. Primera forma
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
WHERE user='root';
mysql> FLUSH PRIVILEGES;

2. Usando la sentencia SET PASSWORD


shell> mysql -u root mysql
mysql> SET PASSWORD FOR root=PASSWORD('new_password');

3. Usando el comando mysqladmin


shell> mysqladmin -u root password new_password

 6LWDQWD[LVGHODVVHQWHQFLDVJUDQW\UHYRNH
Puede adicionar usuarios de dos diferentes maneras: Utilizando las sentencias Grant.

shell> mysql --user=root mysql


mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO dummy@localhost;

O creando nuevos usuarios utilizando la sentencia insert sobre las grandes tablas.
shell> mysql --user=root mysql
mysql> INSERT INTO user

14
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.

VALUES('localhost','monty',PASSWORD('some_pass'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
mysql> INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
mysql> INSERT INTO user SET Host='localhost',User='admin',
Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password)
VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;

La sintaxis de la sentencia grant es la siguiente:

GRANT priv_type [(column_list)] [, priv_type [(column_list)] …]


ON {tbl_name | * | *.* | db_name.*}
TO user_name [IDENTIFIED BY ‘password’]
[,user_name [IDENTIFIED BY ‘password’] …]
[WITH GRANT OPTION]

La sintaxis de la sentencia revoke es la siguiente:

REVOKE priv_type [(column_list)] [, priv_type [(column_list)] …]


ON {tbl_name | * | *.* | db_name.*}
FROM user_name [,user_name …]

15

Potrebbero piacerti anche