ホームページ >データベース >mysql チュートリアル >mysqlのinsertの戻り値は何ですか?

mysqlのinsertの戻り値は何ですか?

青灯夜游
青灯夜游オリジナル
2023-04-11 18:03:515022ブラウズ

mysql では、insert ステートメントの戻り値は新しいデータの ID です。 INSERT ステートメントは、タプル データの 1 行以上をデータベース内の既存のテーブルに挿入するために使用されます。構文は、「INSERT INTO table(column1,column2...) VALUES (value1,value2,...);」です。 "INSERT INTO" 句の後の括弧は、テーブル名とカンマで区切られた列のリストを指定します。

mysqlのinsertの戻り値は何ですか?

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

insert の戻り値は、新しいデータの ID です。 もちろん、データベースが自動インクリメント ID の主キーをサポートしていることが前提です。自動インクリメントの主キーが定義されていない場合は、特別な数値が返されます。

MySQL INSERT: データの挿入 (データの追加)

データベースとテーブルが正常に作成されたら、データをデータベース テーブルに挿入する必要があります。 MySQL では、INSERT ステートメントを使用して、タプル データの 1 行以上をデータベース内の既存のテーブルに挿入できます。

1. 単純な MySQL INSERT ステートメント

MySQL INSERT ステートメントは、テーブルに 1 つ以上の行を挿入するために使用されます。真ん中。 INSERT ステートメントの構文を以下に示します。

INSERT INTO table(column1,column2...)
VALUES (value1,value2,...);

最初の INSERT INTO 句の後に、括弧内にテーブル名を指定し、カンマで区切って列のリストを指定します。
次に、 キーワード VALUES の後に、対応する列のカンマ区切りの値を括弧内に配置します。

insert ステートメントを実行する前に、INSERT ステートメントを実行するための INSERT 権限が必要です。

INSERT ステートメントを練習するために、tasks という名前の新しいテーブルを作成しましょう。次の create ステートメントを参照してください。

USE testdb;

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)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
たとえば、次の場合

tasts テーブルにタスクを挿入するには、次のように INSERT ステートメントを使用します。

INSERT INTO tasks(subject,start_date,end_date,description)
VALUES('Learn MySQL INSERT','2017-07-21','2017-07-22','Start learning..');
このステートメントを実行すると、MySQL は、影響を受ける行の数。この場合、1 つの行が影響を受けます。

次に、以下に示すように、次のステートメントを使用して

tasks のデータをクエリします。

SELECT * FROM tasks;
上記のクエリ ステートメントを実行し、次の結果を取得します。

+---------+--------------------+------------+------------+------------------+
| task_id | subject            | start_date | end_date   | description      |
+---------+--------------------+------------+------------+------------------+
|       1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. |
+---------+--------------------+------------+------------+------------------+
1 row in set

2. MySQL INSERT - 複数行の挿入

#一度に複数の行をテーブルに挿入したい場合は、

を使用できます。 INSERT ステートメントを次の構文で使用します:

INSERT INTO table(column1,column2...)
VALUES (value1,value2,...),
       (value1,value2,...),
...;
この形式では、各行の値のリストはカンマで区切られています。たとえば、

tasks テーブルに複数の行を挿入するには、次のステートメントを使用します。

INSERT INTO tasks(subject,start_date,end_date,description)
VALUES ('任务-1','2017-01-01','2017-01-02','Description 1'),
       ('任务-2','2017-01-01','2017-01-02','Description 2'),
       ('任务-3','2017-01-01','2017-01-02','Description 3');
上記のステートメントを実行した後、return -

Query OK, 3 rows affected
Records: 3  Duplicates: 0  Warnings: 0
Now query

タスク テーブル内のデータは次のとおりです-

select * from tasks;
上記のクエリ ステートメントを実行すると、次の結果が得られます-

+---------+--------------------+------------+------------+------------------+
| task_id | subject            | start_date | end_date   | description      |
+---------+--------------------+------------+------------+------------------+
|       1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. |
|       2 | 任务-1             | 2017-01-01 | 2017-01-02 | Description 1    |
|       3 | 任务-2             | 2017-01-01 | 2017-01-02 | Description 2    |
|       4 | 任务-3             | 2017-01-01 | 2017-01-02 | Description 3    |
+---------+--------------------+------------+------------+------------------+
4 rows in set
に対応する列の値を指定すると、テーブル内のすべての列を使用する場合は、次のように

INSERT ステートメントの列リストを無視できます:

INSERT INTO table
VALUES (value1,value2,...);
または -

INSERT INTO table
VALUES (value1,value2,...),
       (value1,value2,...),
...;
必須ではないことに注意してください。カラム (例:

taskid カラム) を自動インクリメントするには、MySQL が自動インクリメントするカラムの値を自動的に生成するため、値を指定します。

3. SELECT 句を使用した MySQL INSERT

MySQL では、SELECT によって返されたカラムと値を使用できます。ステートメントを使用して、

INSERT ステートメントの値を設定します。この機能は、次のように INSERT 句と SELECT 句を使用してテーブルを完全または部分的にコピーできるため、非常に便利です。

INSERT INTO table_1
SELECT c1, c2, FROM table_2;
## をコピーするとします。 #tasks

テーブルが tasks_bak テーブルにコピーされます。

最初に

、次に示すように、tasks テーブルの構造をコピーして、tasks_bak という名前の新しいテーブルを作成します。 ##2 番目のステップ では、次の

INSERT

ステートメントを使用して、tasks テーブルのデータを tasks_bak テーブルに挿入します。 <pre class="brush:php;toolbar:false">CREATE TABLE tasks_bak LIKE tasks;</pre>3 番目のステップ では、

tasks_bak

テーブルのデータをチェックして、tasks テーブルからのコピーが実際に完了したかどうかを確認します。 <pre class="brush:php;toolbar:false">INSERT INTO tasks_bak SELECT * FROM tasks;</pre>4. MySQL INSERT および ON DUPLICATE KEY UPDATE

新しい行が主キー (PRIMARY KEY) または に違反する場合UNIQUE制約、MySQL ではエラーが発生します。たとえば、次のステートメントを実行すると:

mysql> select * from tasks;
+---------+--------------------+------------+------------+------------------+
| task_id | subject            | start_date | end_date   | description      |
+---------+--------------------+------------+------------+------------------+
|       1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. |
|       2 | 任务-1             | 2017-01-01 | 2017-01-02 | Description 1    |
|       3 | 任务-2             | 2017-01-01 | 2017-01-02 | Description 2    |
|       4 | 任务-3             | 2017-01-01 | 2017-01-02 | Description 3    |
+---------+--------------------+------------+------------+------------------+
4 rows in set

MySQL は満足せず、エラー メッセージをスローします: <pre class="brush:php;toolbar:false">INSERT INTO tasks(task_id,subject,start_date,end_date,description) VALUES (4,'Test ON DUPLICATE KEY UPDATE','2017-01-01','2017-01-02','Next Priority');</pre>テーブル内の主キー

task_id

カラムすでに存在します 値

4

を持つ行が存在するため、ステートメントは PRIMARY KEY 制約に違反します。 ただし、INSERT ステートメントで ON DUPLICATE KEY UPDATE オプションを指定すると、MySQL は新しい行を挿入するか、元の行レコードを新しい値で更新します。

たとえば、次のステートメントは、task_id

4

である行を、新しい task_idsubject で更新します。 <pre class="brush:php;toolbar:false">Error Code: 1062. Duplicate entry '4' for key 'PRIMARY' 0.016 sec</pre>上記のステートメントを実行すると、MySQL は行 2 が影響を受けることを示すメッセージを送信します。ここで、

tasks

テーブルのデータを見てみましょう: <pre class="brush:php;toolbar:false">INSERT INTO tasks(task_id,subject,start_date,end_date,description) VALUES (4,'Test ON DUPLICATE KEY UPDATE','2017-01-01','2017-01-02','Next Priority') ON DUPLICATE KEY UPDATE     task_id = task_id + 1,     subject = 'Test ON DUPLICATE KEY UPDATE';</pre> 新しい行は挿入されませんでしたが、task_id の値は

に更新されました。 4

わかりました。上記の INSERT ON DUPLICATE KEY UPDATE ステートメントは、次の UPDATE ステートメントと同等です: <pre class="brush:php;toolbar:false">UPDATE tasks  SET      task_id = task_id + 1,     subject = 'Test ON DUPLICATE KEY UPDATE' WHERE     task_id = 4;</pre> <p>【相关推荐:<a href="https://www.php.cn/course/list/51.html" target="_blank" textvalue="mysql视频教程">mysql视频教程</a>】</p>

以上がmysqlのinsertの戻り値は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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