Charla Mysql
-
Upload
matias-alejo-garcia -
Category
Technology
-
view
2.763 -
download
0
Transcript of Charla Mysql
- 1.
- MySQL Avanzado
- Jornadas Regionales de Software Libre 2008
- Ing. Matas Alejo Garca
- [email_address]
-
- Confronte.com
-
- UADE
2.
- MySQL Avanzado
- 20 Trucos para MySQL
- Jornadas Regionales de Software Libre 2008
- Ing. Matas Alejo Garca
- [email_address]
-
- Confronte.com
-
- UADE
3.
- Agenda
- Historia y versiones
- 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.
- Escrito en C y C++.
- 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)
- 2008 Sun compr MySQL AB
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
- YouTube, Adobe (2007)
- Nokia, Flickr (2006)
- CNET, Wikipedia, Friendster (2005 )
8. Tip 20: User quotas 9.
- Acceso y passwords
- mysql -u root -p
- USE mysql;
-
- SHOW tables;
-
- DESCRIBE user;
-
- SELECT * FROM userG
-
- UPDATE user SET Password = PASSWORD(pepe) WHERE User = 'root';
-
- FLUSH privileges;
Tip 20: User quotas 10.
- Crear usuarios
- GRANT ALL PRIVILEGESON *.*TO 'pepe'@'localhost'[ IDENTIFIED BY 'pepe_password' ] [ WITH GRANT OPTION ]
- Privilegios por DB / Table
-
-
- *.* => DB.TABLE
-
- Host
-
-
- '%' / '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.
- Tambin en literales
-
- UPDATE t SET a = utf8'hola';
15. Tip 19: Utilizar UTF8
- Para configurar una conexin para recibir resultados y enviar consultas en utf8:
-
- SET NAMES UTF8;
- Hay tambin variables de configuracin en el server
-
- default_character_set = utf8
-
- y ms...
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.
- ENUM
-
- Un string elegido entre un conjunto definido en la tabla, ordenado especficamente.
-
- Mx de 64K elementos.
-
- Puede insertarse como ndice INSERT INTO t (numbers) VALUES (2),(2);
-
- Se pueden ordenar (por ndice)
- SET
-
- 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.
- Comparacin
-
- [NOT]BETWEEN ... AND ...
-
- , =, >=, 10,VALE MAS QUE 10, VALE MENOS QUE 10);
-
-
- IFNULL .
-
-
-
-
-
- SELECT IFNULL(@a,0);/* BUENO PARA VALORES X DFLT */
-
-
-
-
-
- NULLIF .
-
-
-
-
-
-
- SELECT NULLIF(1,1);
-
-
-
-
Tip 13: Operadores de control de flujo 28. Tip 12: Operadores de Strings 29.
-
- CHAR(), CONV()
-
-
- CONCAT, CONCAT_WS
-
-
-
- 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
-
-
-
- ,=, (SELECT ... ) ;
-
- ANY|IN|SOME
-
-
- 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);
-
- ALL
-
-
- 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
-
-
- IF in_id >1 THENSELECT name INTO b FROM user where id = in_id;END IF;
-
- CASE
- LOOP
-
-
- LOOPxx END LOOP;
-
- LEAVE (=last, =break)
- 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;
- time: BEFORE AFTER
- 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.
- NEW. y OLD.
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 (!)
- No puede tener triggers
- Algunas Views son modificables (insert, update)
-
- 1 a 1
-
- 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.
- Para qu?
-
- Performance y escalabilidad
-
- Seguridad (backup sobre el slave)
-
- Anlisis (en el slave, sin alterar el master)
-
- Local copies
Tip 2: Replicacin 55.
- Scaleout
Tip 2: Replicacin 56.
- Redundancy
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.
- binlog vs. relaylog
Tip 2: Replicacin 58. Tip 1: SQL_FOUND_ROWS 59.
- SELECT a WHERE x,y,z ... LIMIT 10;
-
- => 10 resultados
- PAGER ?
-
- SELECT count(*) ....
- SELECT SQL_CALC_FOUND_ROWS a WHERE x,y,z... LIMIT 10;
-
- SELECT FOUND_ROWS();
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.
- ON DUPLICATE KEY
- 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.
- 5.1
- Patitioning (porciones de tablas en diferentes FSs)
- Row based-replication (was statement based)
- Plugins
- Triggers on time
- XML: ExtractValue
67.
- 6.0
- Falcon Engine
- BACKUP / RESTORE desde SQL
- Mejoras en INFORMATION_SCHEMA
- Mejoras en optimizador de INNODB / MYISAM
- XML: Load XML
68. Muchas Gracias!