INSERT |
Insère |
---|---|
MySQL |
Syntaxe
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] |
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] |
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] |
Paramètres
Nom | Description | |
---|---|---|
tbl_name | Ce paramètre permet d'indiquer le nom de la table à traiter | |
col_name | Ce paramètre permet d'indiquer le nom de la colonne où insérer les données | |
expr | Ce paramètre permet d'indiquer l'expression à appliquer à la colonne. |
Description
Cette instruction permet d'insérer un nouvel enregistrement dans une table.
Remarques
- ATTENTION ! Le comportement durant l'insertion n'est pas le même lorsque le mode «STRICT» est à «ON» ou «OFF». Ainsi, lorsque le mode strict à «OFF», lorsqu'une valeur entière est en dehors de l'intervalle, les valeurs sont insérées malgré et correspondra à sa valeur maximale insérable (soit l'équivalent d'un MAXINT).
- «Disable foreign key checks or constraints» : Si vous ne voulez pas recevoir des messages d'erreurs provoquer par la vérification de la présence de clef étrangère dans votre table, lors de votre insertion de données, vous devrez envisager de précédé de faire suivre vos instructions d'insertion par «SET foreign_key_checks» de la façon suivante :
- Copie de données d'une table à une autre : On utilise normalement un «INSERT SELECT» afin d'effectuer des copiés de données d'une table à une autre.
plutôt que de faire d'effectuer «ALTER TABLE table DROP FOREIGN KEY nom_de_la_clef_etrangere».
Exemples
Voici un exemple montrant des insertions de valeurs divers dans un type de données entier :
- CREATE TABLE IF NOT EXISTS `table_de_test` (`id` INT(10) UNSIGNED NOT NULL,`noBillet` INT(11) SIGNED NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
-
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (1,-1);
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (2,'A');
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (3,'A123');
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (4,'456A123');
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (5,2990221014);
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (6,2147*2);
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (7,2147483647*2);
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (8,4294967296);
- INSERT INTO `table_de_test` (`id`,`noBillet`) VALUES (9,4294967297);
Si le mode STRICT est à OFF («SET sql_mode="";») on obtiendra le résultat suivant :
|
Si le mode STRICT est à ON («SET sql_mode=STRICT_ALL_TABLES;») on obtiendra le résultat suivant :
|
L'exemple suivant permet d'effectuer une insertion massive dans la table «departments» de données en se basant sur les identificateurs «dept_id» n'étant pas présent dans la table «departments_taux» mais présent dans «departments» : :
- INSERT INTO `departments_taux` (`taux1`, `taux2`, `id_dept`, `date_creation`)
- SELECT DISTINCT `taux_agence1`,`taux2`, `dept_id`, NOW() FROM `departments` WHERE `dept_id` NOT IN (
- SELECT `dept_id` FROM `departments_taux` WHERE `dept_id` IN (SELECT DISTINCT `dept_id` FROM `departments`)
- ) AND (`taux1`<>0 OR `taux2`<> 0)
Voir également
Article - Les géants de l'informatique - Oracle
Références
MySQL - Référence, Edition Micro Application, Nicolas Rivereau, Antoine Pichot, 2002, ISBN: 2-7429-2560-0, page 906.
MySQL: The definitive guide to using, programming, and administering MySQL 4 databases - Second Edition, Paul Dubois, 2003, ISBN: 0-7357-1212-3, page 873