Insertando datos en una tabla utilizando la instrucción INSERT en MySQL
Declaración simple de la instrucción INSERT en MySQL
La instrucción INSERT en MySQL le permite insertar una o más filas en una table. A
continuación se muestra la sintáxis de la instrucción INSERT
Primero, especifique el nombre de la tabla y una lista de columnas separadas por comas
entre paréntesis después de la cláusula INSERT INTO.
Luego, coloca un valor separado por comas de las columnas correspondientes dentro del
paréntesis seguido de la palabra clave VALUES.
Necesita tener un privilegio INSERT para usar la instrucción INSERT.
Vamos a crear una nueva tabla llamada tareas para practicar la declaración INSERT.
CREATE TABLE IF NOT EXISTS tasks (
task_id INT(11) AUTO_INCREMENT,
subject VARCHAR(45) DEFAULT NULL,
start_date DATE DEFAULT NULL,
end_date DATE DEFAULT NULL,
description VARCHAR(200) DEFAULT NULL,
PRIMARY KEY (task_id)
);
Bases de Datos para Ingeniería
Por ejemplo, si desea insertar una nueva tarea en la tabla de tareas, use la instrucción
INSERT de la siguiente manera:
INSERT INTO tasks(subject,start_date,end_date,description)
VALUES('Learn MySQL INSERT','2010-01-01','2010-01-02','Start
learning..');
Después de ejecutar la instrucción, MySQL devuelve un mensaje para informar el número
de filas afectadas. En este caso, una fila se vio afectada.
SELECT
*
FROM
tasks;
FUNCIÓN MySQL INSERT – insertar filas múltiples Para insertar varias filas en una tabla,
utilice la instrucción INSERT con la siguiente sintáxis:
En esta forma, la lista de valores de cada fila está separada por una coma. Por ejemplo,
para insertar múltiples filas en la tabla tasks, se utilizará la siguiente instrucción:
INSERT INTO tasks(subject,start_date,end_date,description)
VALUES ('Task 1','2010-01-01','2010-01-02','Description 1'),
('Task 2','2010-01-01','2010-01-02','Description 2'),
('Task 3','2010-01-01','2010-01-02','Description 3');
3 filas afectadas. Genial!
Bases de Datos para Ingeniería
Si especifica el valor de la columna correspondiente para todas las columnas de la tabla,
puede ignorar la lista de columnas en la instrucción INSERT de la siguiente manera:
Nótese que no se necesita tener que especificar el valor para auto incrementar la
columna, por ejemplo, la columna taskid es porque MySQL genera el valor para auto
incrementar la columna automáticamente.
Función MySQL INSERT con la cláusula SELECT
En MySQL, se pueden especificar los valores para la instrucción INSERT desde la
instrucción SELECT. Esta característica es muy amigable porque se puede copiar una
table completa o parcialmente utilizando las cláusulas INSERT y SELECT como se
menciona a continuación:
Enseguida, copie la tabla tasks a la tabla task_1.
Primero, crear una nueva tabla llamada tasks_1 copiando la estructura de la tabla tasks
como a continuación se menciona:
CREATE TABLE tasks_1 LIKE tasks;
Bases de Datos para Ingeniería
Segundo, insertar los datos desde la tabla tasks dentro de la tabla tasks_1 utilizando la
instrucción INSERT:
INSERT INTO tasks_1
SELECT * FROM tasks;
Tercero, checar la tabla tasks_1 para ver si actualmente se copia desde la tabla tasks.
SELECT
*
FROM
tasks_1;
Función INSERT en MySQL INSERT con la función ON DUPLICATE KEY UPDATE
Bases de Datos para Ingeniería
Si la nueva fila viola la restricción PRIMARY KEY o UNIQUE, Por ejemplo, si se ejecuta la
siguiente instrucción:
INSERT INTO tasks(task_id,subject,start_date,end_date,description)
VALUES (4,'Test ON DUPLICATE KEY UPDATE','2010-01-01','2010-01-
02','Next Priority');
MySQL emite un mensaje de error:
Error Code: 1062. Duplicate entry '4' for key 'PRIMARY' 0.016 sec
Porque la fila con la clave primaria task_id 4 ya existe en la tabla llamada tasks, la
instrucción viola la restricción PRIMARY KEY constraint.
Sin embargo, si especifica la opción ON DUPLICATE KEY UPDATE en la instrucción
INSERT, MySQL insertará una nueva fila o actualizará la fila existente con los nuevos
valores.
Por ejemplo, la siguiente instrucción actualiza la fila existente cuyo task_id es 4 con la
nueva task_id y subject.
INSERT INTO tasks(task_id,subject,start_date,end_date,description)
VALUES (4,'Test ON DUPLICATE KEY UPDATE','2010-01-01','2010-01-
02','Next Priority')
ON DUPLICATE KEY UPDATE
task_id = task_id + 1,
subject = 'Test ON DUPLICATE KEY UPDATE';
MySQL emite un mensaje diciendo que 2 líneas fueron afectadas .
Bases de Datos para Ingeniería
Favor de checar la tabla tasks:
SELECT
*
FROM
tasks;
La nueva fila no fue insertada. Pero la fila existente con la task_id 4 fue actualizada.
La instrucción INSERT ON DUPLICATE KEY UPDATE arriba es equivalente a la siguiente
instrucción UPDATE:
UPDATE tasks
SET
task_id = task_id + 1,
subject = 'Test ON DUPLICATE KEY UPDATE'
WHERE
task_id = 4;
Bases de Datos para Ingeniería