- Jornadas Regionales de Software Libre 2008
2.
- Jornadas Regionales de Software Libre 2008
3.
- 20 trucos y consejos para MySQL
4.
- Multi-thread, multi-user, robust SQL server.
- MYSQL AB. Primera version 1995.
- Mission critical, heavy load production server.
- Dos licencias GNU GPL y Comercial.
- Open Source. Comunidad muy activa. 10 mill de
instalaciones.
- MaxDB es otro proyecto de MYSQL AB.
- ANSI SQL / ODBC SQL. SQL99.
5.
- Diferentes Storage engines.
- Casos de 60000 tablas, 5000mill filas.
- Hasta 64 ndices por tabla. (767/1000 bytes por ndice)
- Conexin por TCP Sockets / UNIX Sockets o named pipes.
- Libreras ODBC, Connector/J, Connector/NET, C, C++, Perl, PHP,
Python, Ruby y Tcl.
- Utilidades varias: mysqldump, mysqladmin, GUI...
- 2005 Oracle compr OY (InnoDB), 2006 Sleepycat (BerkeleyDB)
13 6. 3.23=>2000. Primera versin masiva. 4.0 => Unions 4.1
=> Subqueries, R-Trees 5.0 => SPs, Views, Cursors, XA
Transac, Triggers. (INNODB) 5.1 => Event Scheduler, Partitions,
Storage Engine Plugins, Row-based replication. 6.0 => Falcon
Engine 7. Algunos Usuarios
- PremiosMySQL Application of the Year
- CNET, Wikipedia, Friendster (2005 )
8. Tip 20: User quotas 9.
-
- UPDATE user SET Password = PASSWORD(pepe) WHERE User =
'root';
Tip 20: User quotas 10.
- GRANT ALL PRIVILEGESON *.*TO 'pepe'@'localhost'[ IDENTIFIED BY
'pepe_password' ] [ WITH GRANT OPTION ]
- Privilegios por DB / Table
-
-
- '%' / '192.168.0.1/255.255.255.0'
Tip 20: User quotas 11. Quota ->WITH MAX_QUERIES_PER_HOUR 20
->MAX_UPDATES_PER_HOUR 10 ->MAX_CONNECTIONS_PER_HOUR 5
->MAX_USER_CONNECTIONS 2; Tip 20: User quotas 12. Tip 19:
Utilizar UTF8 13. Tip 19: Utilizar UTF8
- UTF-8es una de la codificaciones de UNICODE .
- Utiliza a partir de 8bits por caracter y es compatible con
ASCII.
- Es muy utilizado en HTML y en XML.
- Recomendado paranuevosproyectos
14. Tip 19: Utilizar UTF8
- UTF-8es una de la codificaciones de UNICODE .
- Utiliza a partir de 8bits por caracter y es compatible con
ASCII.
- Es muy utilizado en HTML y en XML.
- Recomendado paranuevosproyectos.
-
- CREATE DATABASE `test` CHARSET SET utf8;
- Tambin configuacin por tabla, por columna, y por conexin.
-
- UPDATE t SET a = utf8'hola';
15. Tip 19: Utilizar UTF8
- Para configurar una conexin para recibir resultados y enviar
consultas en utf8:
- Hay tambin variables de configuracin en el server
-
- default_character_set = utf8
16. Tip 18: Exportar CSV 17. Tip 18: Exportar CSV SELECT a,b,a+b
INTO OUTFILE '/tmp/result.text'FIELDS TERMINATED BY ',' OPTIONALLY
ENCLOSED BY '"'LINES TERMINATED BY ' 'FROM test_table;
- CSV: Valores separados por coma.
- Formato difundido ... y feo.
- La salida quedar en el servidor.
18. Tip 17: Importar CSV 19. Tip 17: Importar CSV LOAD
DATA[LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE
tbl_name FIELDSTERMINATED BY 'string']LINES TERMINATED BY 'string'
[IGNORE number LINES] [(col_name_or_user_var,...)] 20. Tip 16:
Elegir correctamente el storage engine 21. Tip 16: Elegir
correctamente el storage engine
- Losstorage enginesson diferentes implementaciones para el
manejo de tablas. Cada uno tiene sus ventajas y desventajas y un
esquema de tablas (DATABASE) puede combinar varios.
- MyISAM : Es el original. No soporta transacciones, ni Fks. Es
muy rpido y soporta Full Text Search.
- MEMORY:100% en memoria. Es ms rpido. No soporta transaccines.
(Antes se llamaba HEAP).
- InnoDB:Soporta transacciones y Fks. Es el ms utilizado en Dbs
que requieran Fks. Ms lento que MyISAM.
- NBD Cluster : Soporta tablas que distribuidas en varios
servers. Slo en distribuciones binarias.
- ARCHIVE, CSV, BLACKHOLE, FEDERATED.
22. Tip 15: Investigar sobre los tipos de datos 23.
-
- Un string elegido entre un conjunto definido en la tabla,
ordenado especficamente.
-
- Puede insertarse como ndice INSERT INTO t (numbers) VALUES
(2),(2);
-
- Se pueden ordenar (por ndice)
-
- Similar a un enum, pero con muchos valores (0;
-
- Similar a user mascaras de bits, pero una interfase ms
amigable.
Tip 15: Investigar sobre los tipos de datos 24. Tip 14:
Operadores propietarios 25.
-
- , =, >=, 10,VALE MAS QUE 10, VALE MENOS QUE 10);
-
-
-
-
- SELECT IFNULL(@a,0);/* BUENO PARA VALORES X DFLT */
Tip 13: Operadores de control de flujo 28. Tip 12: Operadores de
Strings 29.
-
-
- ELT(n,str1,str2...), FIELD(str,str1,str2...)
-
-
- EXPORT_SET(5,Y,N), FIND_IN_SET(b,a,b,c,d) ->2
-
-
- INSERT(), REPLACE(), INSTR(), LOCATE(), TRIM, RTRIM, LTRIM,
MID
-
-
- IN es equivalente a = ANY
-
-
- SELECT a FROM t WHERE id IN (SELECT id from t2);
-
-
- SOME es equivalente a ANY
-
-
- SELECT a FROM t WHERE id = SOME (SELECT id from t2);
-
-
- SELECT a FROM t WHERE b > ALL (SELECT ...)
Tip 8: Subqueries 38. Tip 7: Procedimentos 39. mysql>
delimiter // mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN ->SELECT COUNT(*) INTO param1 FROM t; -> END;
-> // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ;
mysql> CALL simpleproc(@a); Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @a; Tip 7: Procedimentos 40.
- DECLARE var_name[, ...] type [DEFAULT xxx];
- SET var_name = XX[, ... ];
- SELECT col1[, col2 ... ] INTO var1[,var2 ...] [FROM xxx]
CREATE PROCEDURE sp1 (x VARCHAR(5)) BEGIN DECLARE xname
VARCHAR(5) DEFAULT 'bob'; DECLARE newname VARCHAR(5); DECLARE xid
INT; SELECT xname,id INTO newname,xidFROM table1 WHERE xname =
xname; SELECT newname; END; Tip 7: Procedimentos 41.
-
-
- IF in_id >1 THENSELECT name INTO b FROM user where id =
in_id;END IF;
- ITERATE (=next, =continue)
- REPEAT(REPEAT xxxx UNTIL yyy END REPEAT)
- WHILE(WHILE yyyy DO xxxx END WHILE;)
Tip 7: Procedimentos 42. Tip 6: Handlers 43. DECLARE
condition_name CONDITION FOR condition_value condition_value:
SQLSTATE [VALUE] sqlstate_value | mysql_error_code DECLARE
handler_type HANDLER FOR condition_value[,...] statement
handler_type: CONTINUE | EXIT | UNDO condition_value: SQLSTATE
[VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND |
SQLEXCEPTION | mysql_error_code DECLARE CONTINUE HANDLER FOR
SQLSTATE '23000' SET @x2 = 1; Tip 6: Handlers 44. Tip 5: Cursores
45. CREATE PROCEDURE curdemo() BEGIN DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16); DECLARE b,c INT; DECLARE cur1 CURSOR FOR SELECT
id,data FROM test.t1; DECLARE cur2 CURSOR FOR SELECT i FROM
test.t2; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done =
1; OPEN cur1; OPEN cur2; REPEAT FETCH cur1 INTO a, b; FETCH cur2
INTO c; IF NOT done THEN IF b < c THEN INSERT INTO test.t3
VALUES (a,b); ELSE INSERT INTO test.t3 VALUES (a,c); END IF; END
IF; UNTIL done END REPEAT; CLOSE cur1; CLOSE cur2; END Tip 5:
Cursores 46. Tip 4: Triggers 47.
- Es un objeto asociado a una tabla.
- Se activa por un evento, generado por un statement (por ejempl
o: INSERT)
- Son muy tiles para manter coherencia, actualzar caches,
notificaciones, etc.
Tip 4: Triggers 48.
- CREATE [DEFINER = xx] TRIGGER nametime eventON table FOR EACH
ROW statements;
- event: INSERT, UPDATE, DELETE
- DROP TRIGGER [if exists] name;
- BEFORE ocurre antes de la comprobacin de Fks, etc. Tpicamente
se usa para preparar ciertos campos de NEW.
- AFTER ocurre luego del insert/update. Puede cosultar el ID! (la
fila ya existe).
Tip 4: Triggers 49.
DELIMITER | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR
EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3
WHERE a3 = NEW.a1;UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END; | Tip 4: Triggers 50. Tip 3: Views 51.
- ALTER VIEW / CREATE VIEW / DROP VIEW
- No puede tener subqueries
- No puede usar variables ni parmetros (!)
- Algunas Views son modificables (insert, update)
-
- Sin funciones agregadoras/group/distinct/union etc.
Tip 3: Views 52. CREATE VIEW test.v AS SELECT * FROM t; CREATE
VIEW v ASSELECT qty, price, qty*price AS valueFROM t; CREATE VIEW
v2 ASSELECT *FROM v1WHERE a > 0 Tip 3: Views 53. Tip 2:
Replicacin 54.
- Permite replicar los datos de 1 Master a 1 o ms slaves.
- La replicacin es asincrnica.
-
- Performance y escalabilidad
-
- Seguridad (backup sobre el slave)
-
- Anlisis (en el slave, sin alterar el master)
Tip 2: Replicacin 55.
Tip 2: Replicacin 56.
Tip 2: Replicacin 57.
- Es asincrnica (sino NDB Engine: Incluso data
distribuida!).
- Esta basada en el binlog: Historial de modificaciones a la
base.
- Los slave toman el binlog del master y lo reproducen.
- El master no replica. Son los slaves que toman la info.
- Puede filtrarse db/tables en los slaves.
- Cada nodo debe tener un nicoserver-id.Puede cambiarse con
CHANGE MASTER.
Tip 2: Replicacin 58. Tip 1: SQL_FOUND_ROWS 59.
- SELECT a WHERE x,y,z ... LIMIT 10;
- SELECT SQL_CALC_FOUND_ROWS a WHERE x,y,z... LIMIT 10;
Tip 1: SQL_CALC_FOUND_ROWS 60. Tip 1b: REPLACE/DUP 61.
- INSERT INTO t (nombre,telefono)VALUES
('pepe','4321-1234');
-
- Falla si `pepe` ya existe y es una UNIQUE KEY
- SET @a=SELECT ROW_COUNT();
- IF @a=0 THEN UPDATE t SET telefono='4321-1234'where id =
'pepe';
Tip 1b: REPLACE/DUP 62.
- INSERTREPLACE INTO t (nombre,telefono)VALUES
('pepe','4321-1234');
-
- Falla si `pepe` ya existe y es una UNIQUE KEY, hace un
update.
- Problema si hay muchas UNIQUES.
Tip 1b: REPLACE/DUP 63.
- INSERT INTO t (nombre,telefono)VALUES ('pepe','4321-1234') ON
DUPLICATE KEY UPDATE telefono = '4321-1234';
-
- INSERT INTO t (nombre,visitas)VALUES ('pepe',@a) ON DUPLICATE
KEY UPDATE visitas = visitas+ value(visitas);
Tip 1b: REPLACE/DUP 64. Tip 0: Probar Tip 0: Probar Tip 0:
Probar 65. Prximas versiones 66.
- Patitioning (porciones de tablas en diferentes FSs)
- Row based-replication (was statement based)
67.
- BACKUP / RESTORE desde SQL
- Mejoras en INFORMATION_SCHEMA
- Mejoras en optimizador de INNODB / MYISAM
68. Muchas Gracias!