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.
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é.
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,...);
首先,在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;
例如,如果要将任务插入到tasts
表中,则使用INSERT
语句如下:
INSERT INTO tasks(subject,start_date,end_date,description) VALUES('Learn MySQL INSERT','2017-07-21','2017-07-22','Start learning..');
执行该语句后,MySQL返回一条消息以通知受影响的行数。在这种情况下,有一行受到影响。
现在使用以下语句查询 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');
执行上面语句后,返回 -
Query OK, 3 rows affected Records: 3 Duplicates: 0 Warnings: 0
现在查询tasks
表中的数据,如下所示 -
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
的新表,如下所示:
CREATE TABLE tasks_bak LIKE tasks;
第二步,使用以下INSERT
语句将tasks
表中的数据插入tasks_bak
表:
INSERT INTO tasks_bak SELECT * FROM tasks;
第三步,检查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
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');
MySQL很不高兴,并向你扔来一个错误消息:
Error Code: 1062. Duplicate entry '4' for key 'PRIMARY' 0.016 sec
因为表中的主键task_id
列已经有一个值为 4
的行了,所以该语句违反了PRIMARY KEY
约束。
但是,如果在INSERT
语句中指定ON DUPLICATE KEY UPDATE选项,MySQL将插入新行或使用新值更新原行记录。
例如,以下语句使用新的task_id
和subject
来更新task_id
为4
的行。
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';
执行上面语句后,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
新行没有被插入,但是更新了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;
INSERT INTO
, spécifiez le nom de la table et une liste de colonnes séparées par des virgules dans parenthèses. 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;
【相关推荐: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!