Insertar en múltiples tablas en MySQL

Mehvish Ashiq 16 febrero 2024
Insertar en múltiples tablas en MySQL

Este tutorial ejemplifica transacciones y procedimientos almacenados para insertar en varias tablas en MySQL.

Insertar en múltiples tablas en MySQL

No hay forma de insertar un solo comando MySQL en varias tablas, pero podemos usar transacciones MySQL para cumplir con los requisitos del proyecto.

Vamos a crear dos tablas llamadas usuarios y perfiles_de_usuario. La tabla usuarios tiene tres atributos, id_usuario, nombre_usuario y contraseña_usuario, mientras que la tabla perfiles contiene id_usuario, biografía_usuario y página de inicio como atributos.

Vea los siguientes comandos que usamos para crear ambas tablas.

Código de ejemplo:

CREATE TABLE users(
    user_id INT NOT NULL AUTO_INCREMENT,
    user_name VARCHAR(45) NOT NULL,
    user_password VARCHAR(45) NOT NULL,
    PRIMARY KEY(user_id)
);

CREATE TABLE user_profiles(
    user_id VARCHAR(45) NOT NULL,
    user_bio VARCHAR(45) NOT NULL,
    homepage VARCHAR(50) NOT NULL
);

Aquí, hemos creado ambas tablas. Ahora, podemos insertar datos en ambas tablas a la vez de la siguiente manera.

Recuerde, el valor de user_profiles.user_id y users.user_id es el mismo.

Código de ejemplo:

BEGIN;
    INSERT INTO users (user_id,user_name, user_password)
    VALUES (2,'username2', 'userpassword2');
    SELECT @UserID := MAX(user_id) FROM users;
    INSERT INTO user_profiles (user_id, user_bio, homepage)
    VALUES(@UserID,'this is bio for username2', 'http://www.username2.com');
COMMIT;

Agregue dos registros y use la instrucción SELECT para ver los resultados.

Salida (para la tabla de usuarios):

+---------+-----------+---------------+
| user_id | user_name | user_password |
+---------+-----------+---------------+
|       1 | username1 | userpassword1 |
|       2 | username2 | userpassword2 |
+---------+-----------+---------------+
2 rows in set (0.03 sec)

Salida (para los user_profiles):

+---------+---------------------------+--------------------------+
| user_id | user_bio                  | homepage                 |
+---------+---------------------------+--------------------------+
| 1       | this is bio for username1 | http://www.username1.com |
| 2       | this is bio for username2 | http://www.username2.com |
+---------+---------------------------+--------------------------+
2 rows in set (0.00 sec)

Alternativamente, podemos crear un procedimiento almacenado de la siguiente manera para ahorrar tiempo y esfuerzo.

Código de ejemplo:

DELIMITER ;;

CREATE PROCEDURE InsertALL()
BEGIN
	INSERT INTO users (user_id,user_name, user_password)
    VALUES (3,'username3', 'userpassword3');
    SELECT @UserID := MAX(user_id) FROM users;
    INSERT INTO user_profiles (user_id, user_bio, homepage)
    VALUES(@UserID,'this is bio for username3', 'http://www.username3.com');
END ;;

DELIMITER ;
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - MySQL Insert