Maison > base de données > tutoriel mysql > le corps du texte

Analyser l'opération d'insertion dans MySQL

怪我咯
Libérer: 2017-04-01 10:03:28
original
1366 Les gens l'ont consulté

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

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

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

par lots Insérer plusieurs éléments de données

insert into worker values(‘tom','tom@yahoo.com'),(‘paul','paul@yahoo.com');
Copier après la connexion

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

Utilisez set pour insérer des données

insert into worker set name='tom';
Copier après la connexion

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

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

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

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

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

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!

É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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!