MySQL で複数のテーブルに挿入

Mehvish Ashiq 2024年2月16日
MySQL で複数のテーブルに挿入

このチュートリアルでは、MySQL の複数のテーブルに挿入するトランザクションとストアド プロシージャを例示します。

MySQL で複数のテーブルに挿入

単一の MySQL コマンドを複数のテーブルに挿入する方法はありませんが、MySQL トランザクション を使用してプロジェクトの要件を満たすことができます。

usersuser_profiles という名前の 2つのテーブルを作成しましょう。 users テーブルには user_iduser_nameuser_password の 3つの属性があり、profiles テーブルには属性として user_iduser_biohomepage が含まれています。

両方のテーブルを作成するために使用する次のコマンドを参照してください。

コード例:

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

ここでは、両方のテーブルを作成しました。 これで、次の方法で両方のテーブルにデータを一度に挿入できます。

user_profiles.user_idusers.user_id の値は同じです。

コード例:

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;

2つのレコードを追加し、SELECT ステートメントを使用して結果を確認します。

出力 (users テーブル用):

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

出力 (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)

または、時間と労力を節約するために、次のように ストアド プロシージャ を作成することもできます。

コード例:

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

関連記事 - MySQL Insert