mysql では、insert ステートメントの戻り値は新しいデータの ID です。 INSERT ステートメントは、タプル データの 1 行以上をデータベース内の既存のテーブルに挿入するために使用されます。構文は、「INSERT INTO table(column1,column2...) VALUES (value1,value2,...);」です。 "INSERT INTO" 句の後の括弧は、テーブル名とカンマで区切られた列のリストを指定します。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
insert の戻り値は、新しいデータの ID です。 もちろん、データベースが自動インクリメント ID の主キーをサポートしていることが前提です。自動インクリメントの主キーが定義されていない場合は、特別な数値が返されます。
データベースとテーブルが正常に作成されたら、データをデータベース テーブルに挿入する必要があります。 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: 0Now 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 番目のステップ
では、次の
ステートメントを使用して、tasks テーブルのデータを tasks_bak
テーブルに挿入します。 <pre class="brush:php;toolbar:false">CREATE TABLE tasks_bak LIKE tasks;</pre>
3 番目のステップ
では、
テーブルのデータをチェックして、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>
テーブル内の主キー
カラムすでに存在します 値
4 を持つ行が存在するため、ステートメントは PRIMARY KEY
制約に違反します。 ただし、
INSERT
ステートメントで ON DUPLICATE KEY UPDATE オプションを指定すると、MySQL は新しい行を挿入するか、元の行レコードを新しい値で更新します。
たとえば、次のステートメントは、task_id
が
である行を、新しい task_id
と subject
で更新します。 <pre class="brush:php;toolbar:false">Error Code: 1062. Duplicate entry '4' for key 'PRIMARY' 0.016 sec</pre>
上記のステートメントを実行すると、MySQL は行 2
が影響を受けることを示すメッセージを送信します。ここで、
テーブルのデータを見てみましょう: <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
の値は
わかりました。上記の 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 サイトの他の関連記事を参照してください。