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 ;