Maison > base de données > tutoriel mysql > Quelle est la valeur de retour de l'insertion mysql ?

Quelle est la valeur de retour de l'insertion mysql ?

青灯夜游
Libérer: 2023-04-11 18:06:01
original
5093 Les gens l'ont consulté

Dans MySQL, la valeur de retour de l'instruction insert est l'ID des nouvelles données. L'instruction INSERT est utilisée pour insérer une ou plusieurs lignes de données de tuple dans une table existante de la base de données. La syntaxe est "INSERT INTO table(column1,column2...) VALUES (value1,value2,...);"; "INSERT INTO" Les parenthèses après la clause spécifient le nom de la table et une liste de colonnes séparées par des virgules.

Quelle est la valeur de retour de l'insertion mysql ?

L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.

La valeur de retour de insert est l'ID des nouvelles données. Bien sûr, le principe est que la base de données prend en charge les clés primaires d'identification à incrémentation automatique ; si aucune clé primaire à incrémentation automatique n'est définie, un numéro spécial sera renvoyé.

INSERT MySQL : Insérer des données (ajouter des données)

Une fois la base de données et la table créées avec succès, les données doivent être insérées dans la table de la base de données. Dans MySQL, vous pouvez utiliser l'instruction INSERT pour insérer une ou plusieurs lignes de données de tuple dans une table existante de la base de données.

1. Instruction MySQL INSERT simple

L'instruction MySQL INSERT est utilisée pour insérer une ou plusieurs lignes dans une table. La syntaxe de l'instruction INSERT est illustrée ci-dessous : INSERT语句用于将一行或多行插入到表中。下面说明了INSERT语句的语法:

INSERT INTO table(column1,column2...)
VALUES (value1,value2,...);
Copier après la connexion

首先,在INSERT INTO子句之后,在括号内指定表名和逗号分隔列的列表。
然后,将括号内的相应列的逗号分隔值放在VALUES关键字之后。

在执行插入语句前,需要具有执行INSERT语句的INSERT权限。

让我们创建一个名为tasks的新表来练习INSERT语句,参考以下创建语句 -

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;
Copier après la connexion

例如,如果要将任务插入到tasts表中,则使用INSERT语句如下:

INSERT INTO tasks(subject,start_date,end_date,description)
VALUES('Learn MySQL INSERT','2017-07-21','2017-07-22','Start learning..');
Copier après la connexion

执行该语句后,MySQL返回一条消息以通知受影响的行数。在这种情况下,有一行受到影响。

现在使用以下语句查询 tasks 中的数据,如下所示 -

SELECT * FROM tasks;
Copier après la connexion

执行上面查询语句,得到以下结果 -

+---------+--------------------+------------+------------+------------------+
| task_id | subject            | start_date | end_date   | description      |
+---------+--------------------+------------+------------+------------------+
|       1 | Learn MySQL INSERT | 2017-07-21 | 2017-07-22 | Start learning.. |
+---------+--------------------+------------+------------+------------------+
1 row in set
Copier après la connexion

2. MySQL INSERT - 插入多行

想要在表中一次插入多行,可以使用具有以下语法的INSERT语句:

INSERT INTO table(column1,column2...)
VALUES (value1,value2,...),
       (value1,value2,...),
...;
Copier après la connexion

在这种形式中,每行的值列表用逗号分隔。例如,要将多行插入到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');
Copier après la connexion

执行上面语句后,返回 -

Query OK, 3 rows affected
Records: 3  Duplicates: 0  Warnings: 0
Copier après la connexion

现在查询tasks表中的数据,如下所示 -

select * from tasks;
Copier après la connexion

执行上面查询语句,得到以下结果 -

+---------+--------------------+------------+------------+------------------+
| 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
Copier après la connexion

如果为表中的所有列指定相应列的值,则可以忽略INSERT语句中的列列表,如下所示:

INSERT INTO table
VALUES (value1,value2,...);
Copier après la connexion

或者-

INSERT INTO table
VALUES (value1,value2,...),
       (value1,value2,...),
...;
Copier après la connexion

请注意,不必为自动递增列(例如taskid列)指定值,因为MySQL会自动为自动递增列生成值。

3. 具有SELECT子句的MySQL INSERT

在MySQL中,可以使用SELECT语句返回的列和值来填充INSERT语句的值。此功能非常方便,因为您可以使用INSERTSELECT子句完全或部分复制表,如下所示:

INSERT INTO table_1
SELECT c1, c2, FROM table_2;
Copier après la connexion

假设要将tasks表复制到tasks_bak表。

首先,通过复制tasks表的结构,创建一个名为tasks_bak的新表,如下所示:

CREATE TABLE tasks_bak LIKE tasks;
Copier après la connexion

第二步,使用以下INSERT语句将tasks表中的数据插入tasks_bak表:

INSERT INTO tasks_bak
SELECT * FROM tasks;
Copier après la connexion

第三步,检查tasks_bak表中的数据,看看是否真正从tasks表复制完成了。

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
Copier après la connexion

4. MySQL INSERT与ON DUPLICATE KEY UPDATE

如果新行违反主键(PRIMARY KEY)或UNIQUE约束,MySQL会发生错误。例如,如果执行以下语句:

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');
Copier après la connexion

MySQL很不高兴,并向你扔来一个错误消息:

Error Code: 1062. Duplicate entry '4' for key 'PRIMARY' 0.016 sec
Copier après la connexion

因为表中的主键task_id列已经有一个值为 4 的行了,所以该语句违反了PRIMARY KEY约束。

但是,如果在INSERT语句中指定ON DUPLICATE KEY UPDATE选项,MySQL将插入新行或使用新值更新原行记录。

例如,以下语句使用新的task_idsubject来更新task_id4的行。

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';
Copier après la connexion

执行上面语句后,MySQL发出消息说2行受影响。现在,我们来看看tasks表中的数据:

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    |
|       5 | Test ON DUPLICATE KEY UPDATE | 2017-01-01 | 2017-01-02 | Description 3    |
+---------+------------------------------+------------+------------+------------------+
4 rows in set
Copier après la connexion

新行没有被插入,但是更新了task_id值为4的行。上面的INSERT ON DUPLICATE KEY UPDATE

UPDATE tasks 
SET 
    task_id = task_id + 1,
    subject = 'Test ON DUPLICATE KEY UPDATE'
WHERE
    task_id = 4;
Copier après la connexion
Copier après la connexion
🎜Premier🎜, après la clause INSERT INTO, spécifiez le nom de la table et une liste de colonnes séparées par des virgules dans parenthèses.
🎜Ensuite🎜, placez les valeurs séparées par des virgules des colonnes correspondantes entre parenthèses après le mot-clé VALUES. 🎜🎜Avant d'exécuter l'instruction insert, vous devez disposer de l'autorisation INSERT pour exécuter l'instruction INSERT. 🎜🎜Créons une nouvelle table nommée tasks pour pratiquer l'instruction INSERT, référez-vous à l'instruction create suivante -🎜rrreee🎜Par exemple, si vous souhaitez insérer des tâches dans goûts, utilisez l'instruction INSERT comme suit : 🎜rrreee🎜Après avoir exécuté cette instruction, MySQL renvoie un message pour notifier le nombre de lignes affectées. Dans ce cas, une ligne est affectée. 🎜🎜Utilisez maintenant l'instruction suivante pour interroger les données dans tâches, comme indiqué ci-dessous -🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜rrreee🎜🎜🎜2 MySQL INSERT - Insérer. plusieurs lignes🎜🎜 🎜🎜Pour insérer plusieurs lignes dans un tableau à la fois, vous pouvez utiliser l'instruction INSERT avec la syntaxe suivante : 🎜rrreee🎜Dans ce formulaire, la liste des valeurs pour chaque ligne est séparé par des virgules. Par exemple, pour insérer plusieurs lignes dans la table tasks, utilisez l'instruction suivante : 🎜rrreee🎜Après avoir exécuté l'instruction ci-dessus, retournez -🎜rrreee🎜Maintenant, interrogez la table tasks Données, comme indiqué ci-dessous -🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜rrreee🎜Si vous spécifiez la valeur de la colonne correspondante pour toutes les colonnes du tableau, vous pouvez ignorer la liste des colonnes dans le INSERT , comme indiqué ci-dessous : 🎜rrreee🎜 ou -🎜rrreee🎜🎜 Veuillez noter que vous n'êtes pas obligé de spécifier une valeur pour une colonne à incrémentation automatique (telle qu'une colonne taskid ) car MySQL génère automatiquement une valeur pour la colonne d'auto-incrémentation. 🎜🎜🎜🎜🎜3. MySQL INSERT avec la clause SELECT🎜🎜🎜🎜Dans MySQL, vous pouvez utiliser les colonnes et les valeurs renvoyées par l'instruction SELECT pour remplir la valeur de l'instruction INSERT. Cette fonctionnalité est très pratique car vous pouvez copier la table complètement ou partiellement à l'aide des clauses INSERT et SELECT comme ceci : 🎜rrreee🎜Supposons que vous souhaitiez copier des tâches La table code> est copiée dans la table <code>tasks_bak. 🎜🎜🎜Tout d'abord🎜, créez une nouvelle table nommée tasks_bak en copiant la structure de la table tasks, comme indiqué ci-dessous : 🎜rrreee🎜🎜Deuxième étape🎜, utilisez ce qui suit L'instruction INSERT insère les données de la table tasks dans la table tasks_bak : 🎜rrreee🎜🎜Étape 🎜, vérifiez le code tasks_bak pour voir si la copie de la table tâches est réellement terminée. 🎜rrreee🎜🎜🎜4. MySQL INSERT et ON DUPLICATE KEY UPDATE🎜🎜🎜🎜Si la nouvelle ligne viole la clé primaire (PRIMARY KEY) ou la contrainte UNIQUE, MySQL provoquera une erreur. Par exemple, si vous exécutez l'instruction suivante : 🎜rrreee🎜MySQL sera mécontent et vous enverra un message d'erreur : 🎜rrreee🎜Parce que la colonne de clé primaire task_id dans la table a déjà une valeur de 4 , donc l'instruction viole la contrainte PRIMARY KEY. 🎜🎜Cependant, si vous spécifiez l'option ON DUPLICATE KEY UPDATE dans l'instruction INSERT, MySQL insérera une nouvelle ligne ou mettra à jour l'enregistrement de ligne d'origine avec une nouvelle valeur. 🎜🎜Par exemple, l'instruction suivante met à jour la ligne où le task_id est 4 avec les nouveaux task_id et subject . 🎜rrreee🎜Après avoir exécuté l'instruction ci-dessus, MySQL envoie un message indiquant que les lignes 2 sont affectées. Examinons maintenant les données de la table tasks : 🎜rrreee🎜La nouvelle ligne n'a pas été insérée, mais la valeur task_id a été mise à jour à 4<.> D'accord. L'instruction <code>INSERT ON DUPLICATE KEY UPDATE ci-dessus est équivalente à l'instruction UPDATE suivante : 🎜
UPDATE tasks 
SET 
    task_id = task_id + 1,
    subject = 'Test ON DUPLICATE KEY UPDATE'
WHERE
    task_id = 4;
Copier après la connexion
Copier après la connexion

【相关推荐:mysql视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal