ホームページ >データベース >mysql チュートリアル >MySQL Insert で文字列を自動インクリメント主キーと連結するにはどうすればよいですか?

MySQL Insert で文字列を自動インクリメント主キーと連結するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-10 03:30:021069ブラウズ

How to Concatenate a String with an Auto-Incrementing Primary Key in MySQL Insert?

MySQL 挿入で文字列を自動インクリメント主キーと連結する

MySQL データベースにデータを挿入するとき、自動インクリメントされる主キー ID を含む文字列を使用して、一意のキー ID を作成します。

次のユーザー テーブルについて考えます。

CREATE TABLE users (
  user_id   INT NOT NULL AUTO_INCREMENT,
  username   VARCHAR(255) NOT NULL,
  PRIMARY KEY (user_id)
);

ユーザー名列を、自動インクリメントされる user_id が後に続く文字列プレフィックス (例: 'user') に設定するとします。ただし、user_id 値は挿入操作が完了するまで生成されません。

user_id 値がまだ使用できないため、BEFORE INSERT トリガーを使用して単一のステートメントでこれを実行しようとすることは実現できません。同様に、AFTER INSERT トリガーを使用してユーザー名フィールドを更新することはできません。

解決策 1: 挿入と更新

1 つの方法は、最初に挿入操作を実行することです。その後すぐに UPDATE ステートメントを実行して、文字列と user_id を連結します。これは、PHP で次のように実行できます。

// Insert user data
$stmt = $mysqli->prepare(...);
$stmt->bind_param(...);
$stmt->execute();

// Get the auto-incremented user ID
$user_id = $mysqli->insert_id;

// Update username
$update_stmt = $mysqli->prepare("UPDATE users SET username = 'user$user_id' WHERE user_id = ?");
$update_stmt->bind_param("i", $user_id);
$update_stmt->execute();

解決策 2: カスタム INSERT クエリ

user_id が自動インクリメント値でない場合は、次のように挿入できます。元の INSERT ステートメント内の連結されたユーザー名。これには、SQL クエリを変更して連結を含める必要があります。

INSERT INTO users (username, ...) VALUES ('user' || ?, ...);

このクエリでは、プレースホルダー ? を置き換えます。

生成されたカラム (MySQL 5.7 以降)

MySQL 5.7 では、生成されたカラムを作成できるようになりました。式に基づいた列。ただし、自動インクリメント列を参照する生成列を定義することはできません。

以上がMySQL Insert で文字列を自動インクリメント主キーと連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。