Maison >base de données >tutoriel mysql >Analyser l'opération d'insertion dans MySQL
Syntaxe de l'insertion
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE 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, ... ] 或: INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
Si la liste de colonnes et la liste de VALEURS sont toutes deux des listes vides, INSERT créera une ligne, chaque colonne sont définis sur les valeurs par défaut :
INSERT INTO tbl_name () VALUES();
En supposant que la table des travailleurs n'a que le nom et l'e-mail, insérez une donnée
insert into worker values(“tom”,”tom@yahoo.com”);
par lots Insérer plusieurs éléments de données
insert into worker values(‘tom','tom@yahoo.com'),(‘paul','paul@yahoo.com');
Donner une valeur à la colonne à laquelle attribuer une valeur, puis lister les valeursInsérer des données
insert into worker (name) values (‘tom'); insert into worker (name) values (‘tom'), (‘paul');
Utilisez set pour insérer des données
insert into worker set name='tom';
Les lignes sans nom dans la clause SET se voient attribuer une valeur par défaut. Plusieurs lignes ne peuvent pas être insérées à l'aide de cette forme d'instruction INSERT.
Une expression peut référencen'importe quelle colonne précédemment définie dans une table de valeurs, par exemple :
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); --但不能这样 INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
Utilisez l'instruction INSERT...SELECT pour insérer les lignes sélectionnées dans autres tables
insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2; --如果每一列都有数据 insert into tbl_name1 select col3,col4 from tbl_name2;
La requête ne peut pas contenir de clause ORDER BY et la table de destination de l'instruction INSERT ne peut pas apparaître dans la Clause FROM de la partie de requête SELECT.
ON DUPLICATE KEY UPDATE
Si vous spécifiez ON DUPLICATE KEY UPDATE et que l'insertion d'une ligne entraînerait une valeur en double dans un UNIQUEindex ou PRIMARY KEY, une MISE À JOUR du l'ancienne ligne est exécutée.
--假设a,b为唯一索引,表table没有1,2这样的行是正常插入数据,冲突时,更新c列的值 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3; --或者是 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=values(c); --引用其他列更新冲突的行 INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 向一个已定义为NOT NULL的列中插入NULL。对于一个多行INSERT语句或INSERT INTO...SELECT语句,根据列数据的类型,列被设置为隐含的默认值。对于数字类型,默认值为0;对于字符串类型,默认值为空字符串('');对于日期和时间类型,默认值为“zero”值。
INSÉRER DANS... SÉLECTIONNER SUR MISE À JOUR DE LA CLÉ EN DOUBLE
insert into tbl_name1(a,b,c) select col1,col2,col3 from tbl_name2 ON DUPLICATE KEY UPDATE c=values(c);
INSÉRER RETARDÉE
Cette option est utile si votre client ne peut pas attendre la fin de INSERT. Lorsqu'un client utilise INSERT DELAYED, il recevra immédiatement un OK du serveur. Et la ligne est mise en file d'attente dans la file d'attente, et la ligne est insérée lorsque la table n'est pas utilisée par autres threads.
Un autre avantage important de l'utilisation de INSERT DELAYED est que les insertions de nombreux clients sont regroupées et écrites dans un bloc. C'est beaucoup plus rapide que d'effectuer de nombreuses insertions indépendantes.
INSERT DELAYED INTO worker (name) values (‘tom'), (‘paul');
Il existe certaines limitations lors de l'utilisation de DELAYED :
1.INSERT DELAYED n'est disponible que pour les tables MyISAM, MEMORY et ARCHIVE. Pour les tables MyISAM, s'il n'y a pas de blocs libres au milieu du fichier de données, les instructions SELECT et INSERT sont prises en charge. Dans ces cas, il n'est fondamentalement pas nécessaire d'utiliser INSERT DELAYED avec MyISAM.
2.INSERT DELAYED ne doit être utilisé que pour les instructions INSERT qui spécifient une liste de valeurs. Le serveur ignore DELAYED pour les instructions INSERT DELAYED...SELECT et DELAYED pour les instructions INSERT DELAYED...ON DUPLICATE UPDATE.
3. Étant donné que l'instruction est renvoyée immédiatement avant l'insertion de la ligne, vous ne pouvez pas utiliser LAST_INSERT_ID() pour obtenir la valeur AUTO_INCREMENT. Les valeurs AUTO_INCREMENT peuvent être générées par des instructions.
4. Pour les instructions SELECT, les lignes DELAYED ne sont pas visibles tant que ces lignes ne sont pas réellement insérées.
5.DELAYED est ignoré dans le serveur de réplication esclave, car DELAYED ne produira pas de données différentes dans le serveur esclave et dans le serveur maître.
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!