advertisement

Charla Mysql

46 %
54 %
advertisement
Information about Charla Mysql

Published on August 20, 2008

Author: matias.alejo.garcia

Source: slideshare.net

advertisement

MySQL Avanzado Jornadas Regionales de Software Libre 2008 Ing. Matías Alejo García [email_address] Confronte.com UADE

MySQL Avanzado

Jornadas Regionales de Software Libre 2008

Ing. Matías Alejo García

[email_address]

Confronte.com

UADE

MySQL Avanzado 20 Trucos para MySQL Jornadas Regionales de Software Libre 2008 Ing. Matías Alejo García [email_address] Confronte.com UADE

MySQL Avanzado

20 Trucos para MySQL

Jornadas Regionales de Software Libre 2008

Ing. Matías Alejo García

[email_address]

Confronte.com

UADE

Agenda Historia y versiones 20 trucos y consejos para MySQL

Agenda

Historia y versiones

20 trucos y consejos para MySQL

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.

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.

Diferentes “Storage engines”. Casos de 60000 tablas, 5000mill filas. Hasta 64 índices por tabla. (767/1000 bytes por índice) Conexión por TCP Sockets / UNIX Sockets o named pipes. Librerías 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

Diferentes “Storage engines”.

Casos de 60000 tablas, 5000mill filas.

Hasta 64 índices por tabla. (767/1000 bytes por índice)

Conexión por TCP Sockets / UNIX Sockets o named pipes.

Librerías 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

3.23=>2000. Primera versión “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

Algunos Usuarios Premios MySQL Application of the Year YouTube, Adobe (2007) Nokia, Flickr (2006) CNET, Wikipedia, Friendster (2005 )

Premios MySQL Application of the Year

YouTube, Adobe (2007)

Nokia, Flickr (2006)

CNET, Wikipedia, Friendster (2005 )

Tip 20: User quotas

Acceso y passwords mysql -u root -p <DB> USE mysql; SHOW tables; DESCRIBE user; SELECT * FROM userG UPDATE user SET Password = PASSWORD(“pepe”) WHERE User = 'root'; FLUSH privileges; Tip 20: User quotas

Acceso y passwords

mysql -u root -p <DB>

USE mysql;

SHOW tables;

DESCRIBE user;

SELECT * FROM userG

UPDATE user SET Password = PASSWORD(“pepe”) WHERE User = 'root';

FLUSH privileges;

Crear usuarios GRANT ALL PRIVILEGES ON *.* 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

Crear usuarios

GRANT ALL PRIVILEGES ON *.* 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'

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

Tip 19: Utilizar UTF8

Tip 19: Utilizar UTF8 UTF-8 es 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 para nuevos proyectos

UTF-8 es 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 para nuevos proyectos

Tip 19: Utilizar UTF8 UTF-8 es 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 para nuevos proyectos. CREATE DATABASE `test` CHARSET SET utf8; También configuación por tabla, por columna, y por conexión. También en literales UPDATE t SET a = utf8'hola';

UTF-8 es 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 para nuevos proyectos.

CREATE DATABASE `test` CHARSET SET utf8;

También configuación por tabla, por columna, y por conexión.

También en literales

UPDATE t SET a = utf8'hola';

Tip 19: Utilizar UTF8 Para configurar una conexión para recibir resultados y enviar consultas en utf8: SET NAMES UTF8; Hay también variables de configuración en el server default_character_set = utf8 y más...

Para configurar una conexión para recibir resultados y enviar consultas en utf8:

SET NAMES UTF8;

Hay también variables de configuración en el server

default_character_set = utf8

y más...

Tip 18: Exportar CSV

Tip 18: Exportar CSV SELECT a,b,a+b INTO OUTFILE '/tmp/result.text' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&quot;' LINES TERMINATED BY ' ' FROM test_table; CSV: Valores separados por coma. Formato difundido ... y feo. La salida quedará en el servidor.

CSV: Valores separados por coma.

Formato difundido ... y feo.

La salida quedará en el servidor.

Tip 17: Importar CSV

Tip 17: Importar CSV LOAD DATA [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name FIELDS TERMINATED BY 'string'] LINES TERMINATED BY 'string' [IGNORE number LINES] [(col_name_or_user_var,...)]

Tip 16: Elegir correctamente el storage engine

Tip 16: Elegir correctamente el storage engine Los storage engines son 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 rápido y soporta Full Text Search. MEMORY: 100% en memoria. Es más rápido. No soporta transacciónes. (Antes se llamaba HEAP). InnoDB: Soporta transacciones y Fks. Es el más utilizado en Dbs que requieran Fks. Más lento que MyISAM. NBD Cluster : Soporta tablas que distribuidas en varios servers. Sólo en distribuciones binarias. ARCHIVE, CSV, BLACKHOLE, FEDERATED.

Los storage engines son 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 rápido y soporta Full Text Search.

MEMORY: 100% en memoria. Es más rápido. No soporta transacciónes. (Antes se llamaba HEAP).

InnoDB: Soporta transacciones y Fks. Es el más utilizado en Dbs que requieran Fks. Más lento que MyISAM.

NBD Cluster : Soporta tablas que distribuidas en varios servers. Sólo en distribuciones binarias.

ARCHIVE, CSV, BLACKHOLE, FEDERATED.

Tip 15: Investigar sobre los tipos de datos

ENUM Un string elegido entre un conjunto definido en la tabla, ordenado específicamente. Máx 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 (<64, entre 64). Por ejemplo (Provincias con sucursales). Cada miembro es flag en una mascara de 64 bits. El orden “no se guarda”. No puede haber repetidos. { col SET ('a','pepe','etc') } INSERT INTO xx VALUES ('a'), ('a,pepe'), ('pepe,etc'), ('a,pepe,etc'); WHERE FIND_IN_SET(col, “a”)>0; Similar a user mascaras de bits, pero una interfase más amigable. Tip 15: Investigar sobre los tipos de datos

ENUM

Un string elegido entre un conjunto definido en la tabla, ordenado específicamente.

Máx 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 (<64, entre 64).

Por ejemplo (Provincias con sucursales).

Cada miembro es flag en una mascara de 64 bits.

El orden “no se guarda”. No puede haber repetidos.

{ col SET ('a','pepe','etc') }

INSERT INTO xx VALUES ('a'), ('a,pepe'), ('pepe,etc'), ('a,pepe,etc');

WHERE FIND_IN_SET(col, “a”)>0;

Similar a user mascaras de bits, pero una interfase más amigable.

Tip 14: Operadores propietarios

Comparación [NOT] BETWEEN ... AND ... <=>, =, >=, <=, <, >, <>, != [NOT] IN (...) IS NULL LIKE, NOT LIKE, SOUNDS LIKE Retornan 1, 0, ó NULL COALESCE (...) GREATEST(...), LEAST (...) Tip 14: Operadores propietarios

Comparación

[NOT] BETWEEN ... AND ...

<=>, =, >=, <=, <, >, <>, !=

[NOT] IN (...)

IS NULL

LIKE, NOT LIKE, SOUNDS LIKE

Retornan 1, 0, ó NULL

COALESCE (...)

GREATEST(...), LEAST (...)

Tip 13: Operadores de control de flujo

CASE . SELECT CASE @a WHEN 1 THEN “VALE UNO” WHEN 2 THEN “VALE DOS” ELSE “VALE OTRA COSA” END; IF . IF (@a>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

CASE .

SELECT CASE @a WHEN 1 THEN “VALE UNO” WHEN 2 THEN “VALE DOS” ELSE “VALE OTRA COSA” END;

IF .

IF (@a>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 12: Operadores de Strings

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 <=>,=,<, ... LENGTH, CHARACTER_LENGTH LCASE, UCASE LOAD_FILE('') NOT REGEXP, REGEXP, RLIKE (no UTF8!) Tip 12: Operadores de Strings

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

<=>,=,<, ...

LENGTH, CHARACTER_LENGTH

LCASE, UCASE

LOAD_FILE('')

NOT REGEXP, REGEXP, RLIKE (no UTF8!)

Tip 11: Operadores de Fecha

Date (abr.) UNIX_TIMESTAMP(), FROM_UNIXTIME() SECOND(), HOUR(), DAY(), WEEK(), MONTH(), YEARWEEK(), DAYOFWEEK()... NOW(), CURDATE(), CURTIME() PERIOD_ADD, PERIOD_DIFF; TIMESTAMP_ADD, TIMESTAMPDIFF, ADDTIME DATE_FORMAT Tip 11: Operadores de Fecha

Date (abr.)

UNIX_TIMESTAMP(), FROM_UNIXTIME()

SECOND(), HOUR(), DAY(), WEEK(), MONTH(), YEARWEEK(), DAYOFWEEK()...

NOW(), CURDATE(), CURTIME()

PERIOD_ADD, PERIOD_DIFF; TIMESTAMP_ADD, TIMESTAMPDIFF, ADDTIME

DATE_FORMAT

Tip 10: Fulltext search

Sólo para tablas MySQL. Para InnoDB? Tablas “paralelas” SELECT * FROM articles WHERE MATCH(title,body) AGAINST ('mysql'); SELECT * FROM articles WHERE MATCH(title,body) AGAINST ('+mysql -oracle' IN BOOLEAN MODE); Tip 10: Fulltext search

Sólo para tablas MySQL.

Para InnoDB? Tablas “paralelas”

SELECT * FROM articles WHERE MATCH(title,body) AGAINST ('mysql');

SELECT * FROM articles WHERE MATCH(title,body) AGAINST ('+mysql -oracle' IN BOOLEAN MODE);

Tip 9: Foreign keys

ALTER TABLE t ADD ... [CONSTRAINT symbol] FOREIGN KEY [id](index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}] Tip 9: Foreign keys

Tip 8: Subqueries

Escalares SELECT 1,(SELECT 2); SELECT a from t WHERE b > (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

Escalares

SELECT 1,(SELECT 2);

SELECT a from t WHERE b > (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 7: Procedimentos

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

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,xid FROM table1 WHERE xname = xname; SELECT newname; END; Tip 7: Procedimentos

DECLARE var_name[, ...] type [DEFAULT xxx];

SET var_name = XX[, ... ];

SELECT col1[, col2 ... ] INTO var1[,var2 ...] [FROM xxx]

IF IF in_id > 1 THEN SELECT name INTO b FROM user where id = in_id; END IF; CASE LOOP LOOP xx 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

IF

IF in_id > 1 THEN SELECT name INTO b FROM user where id = in_id; END IF;

CASE

LOOP

LOOP xx END LOOP;

LEAVE (=last, =break)

ITERATE (=next, =continue)

REPEAT (REPEAT xxxx UNTIL yyy END REPEAT)

WHILE (WHILE yyyy DO xxxx END WHILE;)

Tip 6: Handlers

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

Tip 5: Cursores

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

Tip 4: Triggers

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

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.

CREATE [DEFINER = xx] TRIGGER name time event ON table FOR EACH ROW statements; time: BEFORE ó AFTER event: INSERT, UPDATE, DELETE DROP TRIGGER [if exists] name; BEFORE ocurre antes de la comprobación de Fks, etc. Típicamente 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

CREATE [DEFINER = xx] TRIGGER name time event ON table FOR EACH ROW statements;

time: BEFORE ó AFTER

event: INSERT, UPDATE, DELETE

DROP TRIGGER [if exists] name;

BEFORE ocurre antes de la comprobación de Fks, etc. Típicamente se usa para preparar ciertos campos de NEW.

AFTER ocurre luego del insert/update. Puede cosultar el ID! (la fila ya existe).

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

NEW. y OLD.

Tip 3: Views

ALTER VIEW / CREATE VIEW / DROP VIEW No puede tener subqueries No puede usar variables ni parámetros (!) No puede tener triggers Algunas Views son modificables (insert, update) 1 a 1 Sin funciones agregadoras/group/distinct/union etc. Tip 3: Views

ALTER VIEW / CREATE VIEW / DROP VIEW

No puede tener subqueries

No puede usar variables ni parámetros (!)

No puede tener triggers

Algunas Views son modificables (insert, update)

1 a 1

Sin funciones agregadoras/group/distinct/union etc.

CREATE VIEW test.v AS SELECT * FROM t; CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t; CREATE VIEW v2 AS SELECT * FROM v1 WHERE a > 0 Tip 3: Views

Tip 2: Replicación

Permite replicar los datos de 1 Master a 1 o más slaves. La replicación es asincrónica. Para qué? Performance y escalabilidad Seguridad (backup sobre el slave) Análisis (en el slave, sin alterar el master) Local copies Tip 2: Replicación

Permite replicar los datos de 1 Master a 1 o más slaves.

La replicación es asincrónica.

Para qué?

Performance y escalabilidad

Seguridad (backup sobre el slave)

Análisis (en el slave, sin alterar el master)

Local copies

Scaleout Tip 2: Replicación

Scaleout

Redundancy Tip 2: Replicación

Redundancy

Es asincrónica (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 único server-id. Puede cambiarse con CHANGE MASTER. binlog vs. relaylog Tip 2: Replicación

Es asincrónica (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 único server-id. Puede cambiarse con CHANGE MASTER.

binlog vs. relaylog

Tip 1: SQL_FOUND_ROWS

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

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 1b: REPLACE/DUP

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

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';

INSERT REPLACE 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

INSERT REPLACE 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.

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

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 0: Probar Tip 0: Probar Tip 0: Probar

Próximas versiones

5.1 Patitioning (porciones de tablas en diferentes FSs) Row based-replication (was statement based) Plugins Triggers on time XML: ExtractValue

5.1

Patitioning (porciones de tablas en diferentes FSs)

Row based-replication (was statement based)

Plugins

Triggers on time

XML: ExtractValue

6.0 Falcon Engine BACKUP / RESTORE desde SQL Mejoras en INFORMATION_SCHEMA Mejoras en optimizador de INNODB / MYISAM XML: Load XML

6.0

Falcon Engine

BACKUP / RESTORE desde SQL

Mejoras en INFORMATION_SCHEMA

Mejoras en optimizador de INNODB / MYISAM

XML: Load XML

¡Muchas Gracias!

Add a comment

Related pages

Planet MySQL

Planet MySQL Sus blogs, noticias y opiniones. Login | Registrar Planet MySQL ... Charla: “Testing the MySQL Cluster with ANSTE”
Read more

MySQL Lists: mysql-es: [OT] Charla grauita de replicación ...

Listeros, se que esta lista es de Mysql, pero a caballo regalado no se le miran los dientes ;) les informo que mañana Jueves 12/05 a las 22hs Madrid -como ...
Read more

MySQL Lists: mysql-es: [OT] Charla Gratuita sobre PLGPSQL

[OT] Charla Gratuita sobre PLGPSQL: View as plain text : Se que esta lista es de Mysql, pero el conocimiento.
Read more

Charla sobre Replicacion en SQL Server - YouTube

Charla sobre Replicacion en SQL Server. Category Science & Technology; License Standard YouTube License; Show more Show less. Loading...
Read more

Charla sobre Frameworks para PHP - YouTube

Charla sobre Frameworks para PHP César Cancino. ... Sistema de Hotel en Php y Mysql + Bootstrap - Duration: 24:41. by SISTEDS7 1,199 views.
Read more

grokbase.com

grokbase.com
Read more

AV4TAr/Mysql-Meetup-sphinxsearch · GitHub

Mysql-Meetup-sphinxsearch - Charla sobre sphinxsearch para la primer meetup de mysql en UY.
Read more

Charla L | LinkedIn

View Charla L’S professional profile on LinkedIn. LinkedIn is the world's largest business network, helping professionals like Charla L discover inside ...
Read more

Charla en la Facultad de Informática (Universidad ...

Esto es una invitación para toda la comunidad académica de la UPM a la charla "Acuerdo de la Iniciativa ... « Sun compra MySQL ...
Read more