Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
&8562'(0<64/
,QWURGXFFLyQD0\64/"
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.
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.
2
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.
%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.
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.
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
)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
)XQFLRQHVXVDGDVFRQODVHQWHQFLD*5283%<
6LQWD[LVSDUDDGPLQLVWUDU%DVHGH'DWRV7DEODVHËQGLFHV
DROP DATABASE: Borra todas las tablas de la base de datos y la base de datos.
9
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.
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_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.
10
CURSO PHP y MySQL – Ing. Dayné Hidalgo P.
La sentencia SELECT también se puede usar para exportar los datos de la base a un
archivo texto, de la siguiente manera:
JOIN: Permite unir dos tablas con uno o varios campos en común.
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.
UPDATE: Permite actualizar registros de una tabla, que cumplan la condición de la sentencia WHERE.
SHOW: Muestra información acerca de Base de Datos,tablas, columnas, índices y otra información
adicional.
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:
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 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.
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.
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;
6LWDQWD[LVGHODVVHQWHQFLDVJUDQW\UHYRNH
Puede adicionar usuarios de dos diferentes maneras: Utilizando las sentencias Grant.
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;
15