Curso de MySQL
Consultas, lista de correo 'C++ Con Clase' 'MySQL Con Clase' página de entrada Tabla de contenido Contactar con Webmaster
Curso Sentencias Funciones API C

SQL

Sentencias

ALTER TABLE ANALYZE TABLE BACKUP TABLE BEGIN BEGIN WORK CHECK TABLE CHECKSUM TABLE COMMIT CREATE DATABASE CREATE TABLE CREATE USER DELETE DESCRIBE DO DROP DATABASE DROP INDEX DROP TABLE DROP USER FLUSH GRANT HANDLER INSERT ... SELECT INSERT DELAYED JOIN KILL LOAD DATA LOCK TABLES OPTIMIZE TABLE RENAME TABLE REPAIR TABLE REPLACE RESET REVOKE ROLLBACK SELECT SET SET TRANSACTION SHOW SHOW CHARACTER SET SHOW COLLATION SHOW COLUMNS SHOW CREATE DATABASE SHOW CREATE TABLE SHOW CREATE VIEW SHOW DATABASES SHOW ENGINES SHOW ERRORS SHOW GRANTS SHOW INDEX SHOW INNODB STATUS SHOW KEYS SHOW LOGS SHOW PRIVILEGES SHOW PROCESSLIST SHOW STATUS SHOW TABLE STATUS SHOW TABLES SHOW VARIABLES SHOW WARNINGS START TRANSACTION TRUNCATE UNION UNLOCK TABLES UPDATE USE

INSERT

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
      [INTO] tbl_name [(col_name,...)]
      VALUES ({expression | DEFAULT},...),(...),...
      [ ON DUPLICATE KEY UPDATE col_name=expression, ... ]

O

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
      [INTO] tbl_name
      SET col_name={expression | DEFAULT}, ...
      [ ON DUPLICATE KEY UPDATE col_name=expression, ... ]

O

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

INSERT inserta nuevas filas en una tabla existente. Los formatos INSERT ... VALUES e INSERT ... SET, insertas filas basándose en los valores especificados explícitamente. El formato The INSERT ... SELECT inserta filas seleccionadas de otra tabla o tablas. El formato INSERT ... VALUES con una lista de múltiples valores está soportada por MySQL desde la versión 3.22.5. La sintaxis INSERT ... SET está soportada por MySQL desde la versión 3.22.10.

tbl_name es la tabla donde se insertarán las filas. Las columnas para las que la sentencia proporciona valores se pueden especificar de las siguientes formas:

Los valores de columnas se pueden proporcionar de varias formas:

La sentencia INSERT soporta los modificadores siguientes:

Si se especifica la cláusula ON DUPLICATE KEY UPDATE (nueva en MySQL 4.1.0), y se inserta una fila que puede provocar un valor duplicado en una clave PRIMARY o UNIQUE, se realiza un UPDATE (actualización) de la fila antigua. Por ejemplo, si se declara una columna 'a' como UNIQUE y ya contiene el valor 1, las dos sentencias siguientes tienen el mismo efecto:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
    -> ON DUPLICATE KEY UPDATE c=c+1;
mysql> UPDATE table SET c=c+1 WHERE a=1;

El valor de filas afectadas es 1 si la fila es insertada como un nuevo registro y 2 si se actualiza un registro ya existente.

Nota: si la columna 'b' en única también, la sentencia INSERT puede ser equivalente a esta sentecia UPDATE:

mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

Si a=1 OR b=2 se cumple para varias filas, sólo una será actualizada. En general, se debe intentar evitar el uso de de la cláusula ON DUPLICATE KEY en tablas con múltiples claves UNIQUE.

Desde MySQL 4.1.1 es posible usar la función VALUES(col_name) en una cláusula UPDATE para referirse a los valores de columna en la parte INSERT de una sentencia INSERT ... UPDATE. En otras palabras, VALUES(col_name) en una cláusula UPDATE se refiere al valor col_name que será insertado si no existe un conflicto de clave duplicada. Esta función es especialmente corriente en inserciones de varias filas. La función VALUES sólo tiene sentido en sentencias INSERT ... UPDATE y devuelve NULL en otro caso.

Ejemplo:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
    -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

El comando anterior es idéntico a las dos sentencias siguientes:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
    -> ON DUPLICATE KEY UPDATE c=3;
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6)
    -> ON DUPLICATE KEY UPDATE c=9;

Cuando se usa ON DUPLICATE KEY UPDATE, la opción DELAYED se ignora.

Se puede encontrar el valor usado para una columna AUTO_INCREMENT usando la función LAST_INSERT_ID(). Desde el API C, usar la función mysql_insert_id. Sin embargo, notar que las dos funciones no se comportan de forma idéntica en todas las circunstancias.

Si se usa una sentencia INSERT ... VALUES con una lista de múltiples valores o INSERT ... SELECT, la sentencia devuelve una cadena de información con este formato:

Records: 100 Duplicates: 0 Warnings: 0

Records indica el número de filas procesadas por la sentencia. (No es necesariamente el número de filas insertadas. "Duplicates" puede ser distinto de cero.) "Duplicates" indica el número de filas que no pudieron ser insertadas porque contienen algún valor para un índice único ya existente. "Warnings" indica el número de intentos de inserción de valores de columnas que han causado algún tipo de problemas. Se pueden producir "Warnings" bajo cualquiera de las siguientes condiciones:

Si se usa el API C, la cadena de información se puede obtener mediante la función mysql_info.

Ver también: INSERT ... SELECT e INSERT DELAYED

(4.1.1)