L'opérateur d'insertion insère de nouvelles entrées à la table. Dans ce cas, les valeurs des colonnes peuvent être des constantes littérales ou être le résultat de la sous-requête. Dans le premier cas, un opérateur d'insertion séparé est utilisé pour insérer chaque chaîne; Dans le second cas, de nombreuses lignes seront insérées que la sous-requête est renvoyée.
La syntaxe de l'opérateur est la suivante:
| Les valeurs par défaut)
INSÉRER DANS [(, ...)]
(Valeurs (, ...))
Comme on peut le voir à partir de la syntaxe présentée, la liste des colonnes n'est pas obligatoire (elles disent des crochets dans la description de la syntaxe). Dans le cas où il manque, la liste des valeurs insérées doit être complète, c'est-à-dire de fournir des valeurs pour toutes les colonnes de la table. Dans ce cas, l'ordre des valeurs doit correspondre à la commande spécifiée par l'instruction Créer une table pour la table dans laquelle les lignes sont insérées. De plus, ces valeurs doivent inclure le même type de données que les colonnes dans lesquelles elles sont entrées. Par exemple, envisagez l'insertion de la chaîne dans la table des produits créée par l'opérateur de table suivant:
Créer un produit de table.
maker Char (1) Not Null,
modèle varchar (4) non ,
tapez Varchar (7) Not Null
Devant ajouter à cette table Modèle PC 1157 Fabricant B. Ceci peut être fait par l'opérateur suivant:
Insérer dans le produit
Valeurs ("B", 1157, "PC");
Si vous définissez une liste de colonnes, vous pouvez modifier l'ordre «naturel» de leur suivant:
Insérer dans le produit (type, modèle, fabricant)
Valeurs ("PC", 1157, "B");
Il semblerait qu'il s'agisse d'une possibilité totalement inutile qui ne fait que la conception que plus encombrante. Cependant, il devient gagnant si les colonnes ont des valeurs par défaut. Considérez la structure suivante de la table:
Créer une table product_d.
maker Char (1) NULL,
modèle varchar (4) ,
tapez Varcharner (7) Not Null Par défaut "PC"
Notez que les valeurs de toutes les colonnes ont ici les valeurs par défaut (les deux premiers-null et la dernière colonne sont TYPE-PC). Maintenant, nous pourrions écrire:
Insérer dans le produit_d (modèle, fabricant)
Valeurs (1157, "B");
Dans ce cas, la valeur manquante lors de l'insertion de la chaîne sera remplacée par la valeur par défaut - PC. Notez que si la valeur par défaut n'est pas spécifiée pour la colonne de l'instruction Créer une table et que la restriction NON NULL n'est pas spécifiée, qui interdit l'utilisation de NULL dans cette colonne de table, la valeur par défaut est NULL.
La question se pose: Puis-je ne pas spécifier la liste des colonnes et, néanmoins, utiliser les valeurs par défaut? La réponse est positive. Pour ce faire, en spécifiant explicitement la valeur de l'utilisation du mot réservé par défaut:
Insérer dans le produit_d.
Valeurs ("B", 1158, défaut);
Étant donné que toutes les colonnes ont des valeurs par défaut, il serait possible d'écrire aux valeurs par défaut pour insérer une chaîne:
Insérer dans le produit_d.
Valeurs (par défaut, défaut, défaut);
Cependant, dans ce cas, une conception spéciale de valeurs par défaut est destinée (voir la syntaxe de l'opérateur), avec laquelle l'opérateur ci-dessus peut être réécrit comme
Insérer dans des valeurs de défaut de produit_d;
Notez que lors de l'insertion d'une chaîne dans la table, toutes les restrictions imposées sur cette table sont vérifiées. Celles-ci peuvent être des limitations de la clé primaire ou d'un index unique, vérifiez les limites de la vérification de type, limiter l'intégrité de référence. En cas de violation de toute restriction, la chaîne d'insertion sera rejetée. Considérez maintenant le cas de l'utilisation d'une sous-requête. Devant nous insérer dans la table du produit_d toutes les lignes de la table des produits liés aux modèles d'ordinateurs personnels (type \u003d 'PC'). Étant donné que les valeurs dont vous avez besoin sont déjà disponibles dans une table, la formation de chaînes insérées manuellement, premièrement, est inefficace et, deuxièmement, elle peut permettre des erreurs de saisie. Utiliser les sous-requêtes résout ces problèmes:
L'utilisation du symbole "*" dans la sous-requête est en l'quelconque justifié, car l'ordre des colonnes est identique pour les deux tables. Si ce n'était pas le cas, il serait nécessaire d'appliquer une liste de colonnes dans l'instruction insertion ou dans une sous-requête, ou dans les deux endroits, qui apporterait l'ordre des colonnes:
Ici, aussi bien qu'avant, vous ne pouvez pas spécifier toutes les colonnes si vous souhaitez utiliser les valeurs par défaut, par exemple:
Dans ce cas, le PC par défaut de toutes les lignes insérées sera substitué dans la colonne Type Type Table.
Notez que lors de l'utilisation d'une sous-requête contenant un prédicat, seules ces lignes pour lesquelles la valeur du prédicat est égale à vraie (non inconnue!). En d'autres termes, si la colonne de type de la table du produit permettrait à Null-Valeur, et cette valeur serait présente dans un certain nombre de lignes, ces lignes ne seraient pas insérées dans la table Product_D.
Surmonter la restriction sur l'insertion d'une ligne dans l'instruction insertion lorsque vous utilisez le constructeur de lignes dans l'offre Valeurs permet une utilisation artificielle d'une sous-requête de former une chaîne avec l'offre de l'Union. Donc, si nous devons insérer plusieurs lignes en utilisant un opérateur d'insertion, vous pouvez écrire:
Insérer dans le produit_d.
Sélectionnez "B" comme Maker, 1158 en tant que modèle "PC" comme type
Union tout.
Sélectionnez "C", 2190, "Ordinateur portable"
Union tout.
Sélectionnez "D", 3219, "Imprimante";
Utilisation de l'Union Toutes l'Union préférée, même si le manque de lignes-duplicates est garanti, car dans ce cas, le chèque ne sera pas effectué pour exclure les doublons.
Il convient de noter que l'insertion de plusieurs tuples à l'aide d'un concepteur de lignes est déjà implémentée dans Systèmes de gestion de bases de données relationnelles (SGBD) développés par Microsoft. Langue des requêtes structurées) est un langage informatique universel utilisé pour créer, modifier et gérer des données dans des bases de données relationnelles.serveur SQL 2008. Avec cette opportunité, la dernière demande peut être réécrite dans le formulaire:
Insérer dans les valeurs de produit_d
("B", 1158, "PC"),
("C", 2190, "ordinateur portable"),
Syntaxe générale:
a) Insérez une nouvelle ligne dans le tableau:
Insérer.<таблица> [(Colonnes)]
Valeurs
b) Insérer dans un tableau d'une ou plusieurs lignes extraites de la source spécifiée dans la sous-requête:
Insérer.<таблица> [(Colonnes)]
Des règles:
Le nombre d'éléments de la section "colonnes" doit correspondre au nombre d'éléments dans la section "Valeurs"; Les types de données doivent correspondre ou permettre une transformation implicite;
Dans le cas où la section "Colonne" est manquante, la section "Valeurs" doit contenir autant de valeurs que toutes les colonnes de la table modifiable, en outre, les valeurs doivent être répertoriées dans le même ordre dans lequel la table les colonnes sont déclarées; Par conséquent, il est recommandé de spécifier toujours clairement la liste des colonnes dans lesquelles de nouvelles valeurs seront ajoutées;
Dans le cas de l'utilisation de la syntaxe (B), la sous-requête SELECT peut être adressée à la même table ou à une autre table de base de données ou à une autre base de données sur le serveur;
Si la valeur par défaut est définie pour une colonne de table, et il est nécessaire d'utiliser cette valeur dans l'enregistrement ajouté, puis dans la section "Valeurs" de cette colonne, vous devez écrire un mot clé par défaut.
Exemples :
Insérer dans les détails (détail_name)
Valeurs ("roulement")
Insérer dans l'alimentation (fournisseur_id, approvisionnement_quantitity, approvisionnement_cost,
approvisionnement_date, détaillant_id)
Valeurs (4, 177, 453.45, "09/25/2009", 1)
Insérer le fournisseur (fournisseur_name)
Valeurs (par défaut, "SMIRNOV S. S.")
Modification des enregistrements existants (mise à jour)
Syntaxe générale:
Mettre à jour.<таблица>
ENSEMBLE.<столбец> = <значение> [, <столбец> = <значение>]
Exemples :
Définir le poids \u003d 210
Définir matériau_name \u003d "tolo"
Où matériau_id \u003d 2
Ensemble de département_id \u003d ,
livreur_Date \u003d Delivery_Date + 1 / * Augmente la date de livraison pour la journée
Où livrable_id \u003d 1 ou département_id\u003e 3
Définir détailler_name \u003d détaillant_name + "!!!"
Où le détail_name comme "_a%" et poids entre 6 et 10
Supprimer des enregistrements du tableau (Supprimer)
Syntaxe générale:
Effacer.<таблица>
<условие>
Exemples :
Où détail_id in (2, 5, 8)
Où le poids est null
La tâche:
Remplissez la base de données à l'aide de GestionStudio. Pour ce faire, utilisez la commande "Open Table" sur la table dans le navigateur d'objet (Fig. 4.1).
Requête d'échantillonnage de données
Sélectionnez la syntaxe commune de la requête
SÉLECTIONNER<список столбцов>
De.<таблица(-ы) источник>
Sélectionner et parmi les sections doit être présente dans chaque demande; Les sections restantes peuvent être absentes ou en partie.
Exemples d'implémentation de la requête
Les demandes les plus simples sont:
1. Sélectionnez Titre et poids des détails
Figure. 5.1. Demander les résultats 1
2. Sélectionnez toutes les informations de la table des matériaux.
Figure. 5.2. Demande de résultats n ° 2
Unicité distincte.
3. Sélectionnez des codes de fournisseur uniques dans la table d'alimentation
Figure. 5.3. Demande de résultats n ° 3
Où la limitation
4. Sélectionnez la quantité et la date des détails de la livraison avec le code 1
Figure. 5.4. Demande des résultats n ° 4
5. Sélectionnez les noms des fournisseurs avec des codes 1, 4 et 6
Figure. 5.5 Demander des résultats n ° 5
6. Sélectionnez toutes les informations sur les livraisons effectuées au 1.10.2009
Figure. 5.6. Demander des résultats n o 6
7. Sélectionnez toutes les informations sur les détails qui ne commencent pas par la lettre "B" (dans n'importe quel registre) et dont le poids est inférieur à 50
Figure. 5.7. Demande de résultats Numéro 7
8. Sélectionnez le nom et le code du matériau pour les pièces d'un poids de 5 à 10 g ou dans le titre "H" dans la troisième position
Figure. 5.8. Demande de résultats Numéro 8
9. Sélectionnez les noms des fournisseurs à moins de 15 caractères
Figure. 5.9 Demande de résultats Numéro 9
10. Sélectionnez des mois et des années de fournitures de pièces
Figure. 5.10. Demander des résultats 10
Ordre de tri par.
11. Trier la livraison d'abord par le code des fournisseurs, puis par date de livraison
Figure. 5.11. Résultats de la demande №11
12. Sélectionnez les noms des fournisseurs avec les codes 4, 6, 8, 9 commandés par ordre alphabétique dans l'ordre inverse.
Figure. 5.12. Résultats de la demande №12
Groupe d'agrégation et de regroupement par
Figure. 5.13. Résultats de la demande №13
14. Déterminez le poids moyen des détails du matériau avec code 2
Figure. 5.14. Demande de résultats n ° 2
15. Des livraisons engagées au 1.10.2009, choisissez la plus grande livraison et le plus petit
Figure. 5.15. Résultats de la demande №15
16. Pour les fournisseurs avec des codes de la gamme de 5 à 8, calculez le nombre total de pièces fournies par elles
Figure. 5.16. Résultats de l'exécution de la demande №16
Figure. 5.17. Résultats de la demande №17
Regroupement de restriction ayant
18. Choisissez des matériaux pour lesquels le poids total de ces pièces ne dépassant pas 20
Figure. 5.18. Résultats de la demande №18
19. À partir de l'offre de 2008, choisir les détails de plus d'une fois
Figure. 5.19. Résultats de la demande №19
Type de conversionJeter.
20. Obtenir des informations sur les dates de livraison sous forme de texte
Figure. 5.20. Demande des résultats n ° 20
21. Obtenir des informations du tableau des pièces sous la forme de chaînes "Détail x a un poids y"
Figure. 5.21. Résultats de la demande №21
AlternativesCas.
22. Divisez les pièces sur les poumons (pesant jusqu'à 20), moyen (entre 20 et 50) et lourd
Figure. 5.22. Résultats de la demande №22
Traitement null-valeur
23. Obtenez des informations sur les détails et leurs poids, et si la pièce a le poids non spécifié, à la place de NULL Ecrivez -100
Figure. 5.23. Résultats de la demande №23
Existe une fonctionnalité d'existence
24. Sélectionnez le nom et le code du matériel que ces informations jamais fournies
Figure. 5.24. Résultats de demande n ° 24
25. Sélectionnez les noms de ces matériaux à partir duquel aucun détail n'est effectué.
Figure. 5.25. Résultats de la demande №25
Sous-requêtes
26. Obtenir des informations sur la dernière livraison (par date)
Figure. 5.26. Résultats de la demande №26
27. Obtenez toute la livraison des pièces du matériau avec code 2
Figure. 5.27. Résultats de la demande №27
28. Pour chaque fournisseur, obtenez des informations sur la première (par date) de sa livraison.
Figure. 5.28. Résultats de la demande №28
29. Pour chaque fournisseur, obtenez son nom et la date de la dernière commande
Figure. 5.29. Résultats de la demande №29
Communication de la table de jointure
30. Obtenez une table de type: le nom de la pièce, le nom du matériel à partir de laquelle cet article est fait
Figure. 5.30. Demander les résultats n ° 30
31. Obtenez une table de type de type: Fournisseur, Nom de pièce, Quantité et date de livraison pour plus de détails
Figure. 5.31. Demande des résultats n ° 31
32. Sélectionnez toutes les informations sur ces détails qui ont été fournis.
Figure. 5.32. Résultats de la demande №32
Figure. 5.33. Résultats de la demande №33
34. Sélectionnez les noms des matériaux et faites des pièces.
Figure. 5.34. Demander des résultats n ° 34
35. Obtenez toutes les données sur les fournisseurs, les fournisseurs et les détails.
Figure. 5.35. Demande de résultats Numéro 35
Combinant des tables syndicales.
36. Obtenez la table des titres et des poids des pièces, et la dernière ligne de la table doit contenir les résultats sous la forme du poids total de toutes les pièces.
Figure. 5.36. Demande des résultats n ° 36
37. Obtenez une table de deux champs, où le premier champ est le nom de la pièce, du matériel, du fournisseur ou de la date de livraison et du deuxième champ - la longueur de la ligne du premier champ
Figure. 5.37. Demande des résultats n ° 37
Le contenu de l'article
1.
Les demandes mysql les plus simples
2.
Sélectionner des demandes simples (sélectionnez)
3.
Demandes Simple Insérer (Nouveaux enregistrements)
4.
Mise à jour simple (écrase, finition) Demandes
5.
Delete simple (Supprimer l'enregistrement)
6.
Demandes de chute simple (Supprimer la table)
7.
Demandes MySQL complexes
8.
Demandes MySQL et variables PHP
1. Les demandes SQL les plus simples
1. La liste de toutes les bases de données sera-t-elle.Afficher des bases de données;
2. Wills une liste de toutes les tables de la base de données de base_name.
Afficher les tables dans la base_name;
2. Sélectionner une sélection (sélectionnez) la base de données MySQL
SÉLECTIONNER - une demande qui choisit déjà les données existantes de la base de données. Vous pouvez spécifier certains paramètres de sélection. Par exemple, l'essence de la demande à la langue russe sonne comme ceci - choisissez une telle colonne d'une telle table dans laquelle le paramètre d'une telle colonne est égal à la valeur.1. Sélectionne toutes les données de la table Tbl_Name.
Sélectionnez * auprès de Tbl_Name;
2. Affiche le nombre d'entrées dans la table Tbl_Name.
Sélectionnez Count (*) de Tbl_Name;
3. Sélectionne (SELECT) à partir de (à partir de) Tableau Table TBL_Name limite (limite) 3 enregistrements à partir de 2.
Sélectionnez * à partir de la limite de Name 2.3;
4. Sélectionne (SELECT) Tous les enregistrements (*) de (à partir de) Table Tbl_name et les trie (commandez par) par l'ID de champ dans l'ordre.
Sélectionnez * à partir de la commande Tbl_Name par ID;
5. Sélectionne (SELECT) Tous les enregistrements de (à partir de) Table Tbl_Name et trie-les (commander par) par ID de champ dans l'ordre inverse.
Sélectionnez * à partir de la commande Tbl_Name par ID Desc;
6. choisit ( SÉLECTIONNER) Toutes les entrées (*) de ( De.) Les tables utilisateurs. et les trie ( Commandé par.) sur le terrain identifiant Dans l'ordre croissant, limite ( Limite.) Les 5 premiers enregistrements.
Sélectionnez * à partir de l'ordre des utilisateurs par la limite d'identité 5;
7. choisit tous les enregistrements de la table utilisateurs.où le champ fname. Correspond à la valeur Gena..
Sélectionnez * à partir des utilisateurs où fname \u003d "gena";
8. Sélectionne tous les enregistrements de la table utilisateurs.où la valeur du champ fname. commencer avec Ge..
Sélectionnez * à partir des utilisateurs où fname comme "GE%";
9. Sélectionne tous les enregistrements de la table. utilisateurs.où fname. se termine n / A.et simplifie les enregistrements de la valeur croissante identifiant.
Sélectionnez * à partir des utilisateurs où FNAME aime "% na" commander par ID;
10. Sélectionne toutes les données des haut-parleurs. fname., le nom. De la table utilisateurs..
Sélectionnez FNAME, LNAME à partir des utilisateurs;
11.
Supposons que vous ayez une donnée personnalisée dans la table. Donc, si vous souhaitez afficher uniquement une liste de valeurs rencontrées (de sorte que, par exemple, la Russie n'est pas affichée 20 fois, mais une seule), alors nous utilisons distincts. Saute, de la masse de valeurs répétées de la Russie, de l'Ukraine, de la Biélorussie. Ainsi, de la table utilisateurs. Haut-parleurs pays. Toutes les significations uniques seront affichées.
Sélectionnez le pays distinct des utilisateurs;
12. Sélectionne toutes les lignes de la table utilisateurs. Où Âge. Il a 18,19 et 21.
Sélectionnez * des utilisateurs où l'âge de (18,19,21);
13.
Sélectionne la valeur maximale Âge. Tableau utilisateurs.. C'est-à-dire que si vous avez le plus important dans la table Âge.(de l'anglais) également 55, le résultat de la requête sera de 55 ans.
Sélectionnez Max (âge) à partir des utilisateurs;
14. Sélectionnez les données de la table utilisateurs. Par champs nom. et Âge. OÙ Âge. Accepte la plus petite valeur.
Sélectionnez Nom, Min (Âge) des utilisateurs;
15. Sélectionnez Données dans la table utilisateurs. sur le terrain nom. OÙ identifiant Pas égal à 2.
Sélectionnez le nom des utilisateurs où id! \u003d "2";
3. Insérez simple (nouvelle entrée) Demandes
Insérer. - Demande, ce qui permet d'insérer initialement une entrée dans la base de données. C'est-à-dire qu'il crée une nouvelle entrée (ligne) dans la base de données.1. Fait une nouvelle entrée dans la table utilisateurs., dans le champ nom. insère Sergey et sur le terrain Âge. Inserts 25. Ainsi, la table ajoute une nouvelle ligne avec des valeurs de données. Si les haut-parleurs sont plus grands, ils restent à gauche, soit vide, ou avec des valeurs par défaut.
Insérer dans les valeurs des utilisateurs (nom, âge) ("Sergey", "25");
4. Mise à jour simple MySQL Demandes de base de données
Mettre à jour. - une demande qui vous permet d'écraser les valeurs des champs ou d'ajouter quelque chose dans la ligne déjà existante dans la base de données. Par exemple, il existe une ligne prête, mais elle doit écraser le paramètre de l'âge, comme cela a changé avec le temps.1. Tableau utilisateurs. Âge. Cela devient 18.
Mettre à jour les utilisateurs définis l'âge \u003d "18" où id \u003d "3";
2.
Tous identiques que dans la première demande, la syntaxe de requête est simplement montrée, où deux champs sont écrasés et plus.
Tableau utilisateurs. Où id est 3 valeur de champ Âge. devient 18, et pays. Russie.
Mettre à jour les utilisateurs définis Âge \u003d "18", pays \u003d "Russie" où id \u003d "3";
5. Simple Supprimer (Supprimer l'enregistrement) Query à la base de données MySQL
Effacer. - une demande qui supprime une chaîne de la table.1. Supprime une chaîne de la table utilisateurs. OÙ identifiant égal à 10.
Supprimer des utilisateurs où id \u003d "10";
6. Requête Simple Drop (Supprimer la table) à la base de données MySQL
Tomber. - une demande qui supprime la table.1. Supprime la table entière tbl_name..
Drop Table Tbl_name;
7. Requêtes de base de données MySQL sophistiquées
Demandes curieuses qui peuvent être utiles même aux utilisateurs expérimentésSélectionnez une pièce d'identité, Nom, Pays des utilisateurs, Admins où à_days (maintenant ()) - TO_DAYS (Registry_Date)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Cette requête complexe choisit des haut-parleurs id, nom, pays Dans les tables utilisateurs, administrateurs. OÙ date d'inscription. (date) pas plus vieux 14
jours I. activation. INÉGAL 0
, Trier par date d'inscription. dans l'ordre inverse (nouveau au début).
Mettre à jour les utilisateurs définis Âge \u003d "18+" où Âge \u003d (sélectionnez l'âge des utilisateurs où mâle \u003d "homme");
L'exemple est l'exemple de la soi-disant demande dans la demande en SQL. Mettre à jour l'âge parmi les utilisateurs à 18 ans et plus, où le sol est masculin. Des options de requête similaires ne recommandent pas. Selon l'expérience personnelle, je dirai, il est préférable de créer plusieurs séparés - ils seront élaborés plus rapidement.
8. Quertiez sur la base de données MySQL et PHP
Dans les demandes MySQL dans la page PHP, vous pouvez insérer des variables comme des valeurs comparées et TP. Une paire d'exemples1. choisit tous les enregistrements de la table utilisateurs.où le champ fname. correspond à la valeur de la variable $ Nom..
Sélectionnez * à partir des utilisateurs où fname \u003d "$ nom";
2. Tableau utilisateurs. Où id est 3 valeur de champ Âge. Changements à la valeur de la variable d'âge $.
Mettre à jour les utilisateurs définis Âge \u003d "$ Age" où id \u003d "3";
Attention! Si vous êtes intéressé par un autre exemple, écrivez une question dans le commentaire!
Dans cet article, nous discerrons peut-être l'un des plus importants Requêtes SQL. il demandes d'ajout et de suppression des enregistrements de la table de base de données. Depuis, très souvent a ajoutez de nouvelles entrées à la tableEt pour le faire en mode automatique, ce matériau est nécessaire pour apprendre.
Commencer Demande SQL d'ajouter une nouvelle entrée à la table:
Insertion dans les valeurs des utilisateurs (connecteurs, Pass) ("Testuffer", "123456")
Lors de l'ajout d'une entrée, l'équipe arrive au début. " INSÉRER DANS", Alors le nom de la table dans laquelle nous insérons l'enregistrement. Suivant va à la tête des champs, que nous voulons remplir. Et puis entre parenthèses après le mot" valeurs.«Nous commençons la liste des valeurs de ces champs que nous avons choisis. Après avoir exécuté cette demande, une nouvelle entrée apparaîtra dans notre table.
Parfois requis actualiser l'entrée dans la tablePour cela, il y a ce qui suit requête SQL:
Mettre à jour les utilisateurs Set Login \u003d "Testuser2", Pass \u003d "1234560" Où login \u003d "Testuffer"
Cette demande est plus difficile, car elle a une conception " Où", mais à ce sujet juste en dessous. Au début, il y a une équipe" Mettre à jour.", alors le nom de la table et après" ENSEMBLE."Nous décrivons les valeurs de tous les champs que nous voulons changer. Ce serait simple, mais la question se pose:" Quel type d'enregistrement doit être mis à jour?". Pour cela existe" Où"Dans ce cas, nous mettons à jour l'entrée, le champ" connexion."Ce qui est important" Testutilisateur.". Veuillez noter que s'il y a plusieurs enregistrements, alors absolument tout sera mis à jour! Il est très important de comprendre, sinon vous risquez de perdre votre table.
Parlons un peu de " Où"En plus des contrôles simples sur l'égalité, il existe également des inégalités, ainsi que des opérations logiques: Et. et Ou alors..
Mettre à jour les utilisateurs SET LOGIN \u003d "TESTURE2", PASS \u003d "1234560" Où ID< 15 AND login="TestUser"
le requête SQL Mettre à jour ces enregistrements identifiant qui sont moins 15 ET domaine " connexion."a le sens" Testutilisateur."J'espère que vous avez traité avec le design" Où", Parce que c'est très important. C'est" Où"Utilisé par enregistrements d'échantillonnage des tablesEt c'est la tâche la plus en partie à utiliser lorsque vous travaillez avec des bases de données.
Et, enfin, simple Demande SQL de supprimer des enregistrements de la table:
Supprimer des utilisateurs où login \u003d "Testuser2"
Après l'équipe " Supprimer de."Il y a un nom de la table dans laquelle vous souhaitez supprimer des enregistrements. Décrivez ensuite la conception" où ". Si l'enregistrement sera conforme aux conditions décrites, il sera supprimé. Encore une fois, faites attention, en fonction du nombre d'enregistrements qui satisfont l'état après " Où", Toute quantité de leur nombre peut être supprimée.
Parfois, les programmeurs se produisent un désir brûlant de lire quelque chose de la base de données. Les programmeurs deviennent nerveux et irritables, perdent le sommeil et percent fient à vos doigts dans le clavier. Pour le bien de Universal Good and World World, envisagez de simples travaux avec la base de données de C # à l'aide de ADO.NET et OLE DB. Bien que ce mécanisme prend en charge différentes bases de données telles que Oracle, ici et maintenant, nous utiliserons MS SQL Server.
Deux tâches principales lorsque vous travaillez avec la base de données
2. Exécution de la commande SQL, quelque chose qui apporte sur le serveur (insérer, mettre à jour, supprimer, appeler une fonction ou une procédure stockée.
3. Lecture séquentielle de la chaîne Select-Sample par ligne. Principalement utilisé dans les applications Web, il est plus facile de télécharger tout l'échantillon dans la RAM, en économisant uniquement de la lecture que seules les lignes souhaitées sont insignifiantes.
4. Cas rare. Tableau de mise à jour automatique dans la base de données basée sur les modifications apportées à la clé (en tant que règle modifiable via une interface visuelle). Dans la vie réelle, les données sont généralement lues via une demande complexe avec un groupe de joints ou une représentation, de sorte que la synchronisation automatique ne convient pas.
Classes de base utilisées à ces fins: OLEDBConnection - connexion avec une base, créez avec une chaîne contenant des paramètres de désordonnage, ouverte, Fermer, OLEDBCOMMAND - Créez avec une instance de connexion et une commande SQL si vous devez simplement exécuter la mise à jour ou obtenir une seule valeur, Il y a suffisamment de cours, OledbdataAdapter - créé avec OLEDBCOMMAND, est spécialisé dans des ensembles de lignes de lecture à une fois dans DataTable, peut créer automatiquement des haut-parleurs de données basés sur l'échantillon, pour transférer des modifications du type de données dans la base de données, OLEDBDatreader - des lignes de lecture série dans la base de données. Un à la fois (cela fonctionne à l'intérieur de OledbdataAdapter), DataTable / DataSet - Conteneur de données principale. Dans la liste OLEDBTYPE, la liste stockée des types de données de base de données stockés.
En utilisant system.data; En utilisant system.data.oledb; // chaîne de connexion, système d'utilisateur Windows d'occasion (sécurité intégré \u003d SSPI;) chaîne Connstring \u003d "Fournisseur \u003d sqlololodb.1; Sécurité intégrée \u003d SSPI; Persist Security Info \u003d Faux; Catalogue initial \u003d DatabasEname; Data Source \u003d ServerName"; // Ligne de connexion alternative avec Authentification SQL Server MS SQL // CONNETRING \u003d "FOURNISSEUR \u003d SQLOLOLEDB.1; Persist Security Info Info \u003d False; Initial Catalogue \u003d DatabasEname; Connecter Timeout \u003d 20; Data Source \u003d ServerName; UID \u003d Nom d'utilisateur; PWD \u003d userSpassword ; " OLEDBConnection DBConn \u003d Nouvelle OLEDBConnection (Connstring); dbconn.open (); SOMEDATABLE \u003d Nouveau DataTable (); OLEDBDataAdapter dbadapter \u003d nouveau OLEDBDataAdapter ("Sélectionnez Colonne1, Colonne2 de Test_Table Commande par colonne2", DBConn); // La structure interne de la table vide sera créée automatiquement en fonction des données des données si la structure de la table est déjà définie (par exemple, via le jeu de données Tapé), les données seront écrites dans des colonnes avec des noms correspondants ou ajouter un nouveau dbadapter. Colonnes defill (SaMédatables); // alternative pour remplir la table dans DataSet // dbadapter.fill (Somedataset, "Sompatatable"); dbconn.close ();
2. Exécution de la commande SQL, quelque chose qui apporte sur le serveur (insérer, mettre à jour, supprimer, appeler une fonction ou une procédure stockée..
Surtout la peine de noter les problèmes avec les dates. La mise en œuvre du dat de V.net est extrêmement courbée - initialement, les dates ne peuvent pas être vides, mais elles sont suffisamment vides et à proximité. La solution la plus correcte consiste à utiliser une classe de date spéciale, à corriger les hauts-fonds des programmeurs de Microsoft. Les développeurs loyants conservent toutes les dates du code pour les chaînes et les convertissent uniquement en DateTime uniquement si nécessaire, par exemple lors de la rédaction de la base de données ou de la clé. DateTime nullable ne sauvegarde pas, car la date vide de l'interface doit regarder une chaîne vierge, et lors de l'enregistrement sur la base de données comme dbnull.value - et la null banal dans le code n'est pas convertie en ces valeurs sans danse supplémentaire avec le tambourin .
La première option implique une liaison banale de la chaîne de requête. Il est considéré comme une mauvaise pratique et est particulièrement dangereux dans les applications Web, à mesure que vous êtes vulnérable aux attaques de pirates sur le pirate. Le problème avec des dates vides est si simple non résolu. De plus, un problème supplémentaire apparaît lorsque vous travaillez avec des dates - des formats de ligne de date différents en fonction des paramètres régionaux .NET Framework, de l'environnement de développement et du serveur SQL. Il peut ressembler à cela peut surréaliste - la même demande fonctionne dans le studio de gestion SQL, mais des mouches lors de l'exécution du code. Enregistre partiellement un format spécial de la ligne de dates, néanmoins, souvent dans de petits programmes à usage interne, l'existence dont le monde extérieur ne saura jamais.
OLEDBCOMMAND DBCOMMAND \u003d DBCONN.Createcommand (); dbcommand.commandtext \u003d "Insérer dans test_column (int_column, varchar_column, DateTime_Column) valeurs (" + IntTêdiable "," + stringvariable "," + DateTimevariable.tostring ("yyyymmdd") + ")"; dbcommand.executenonquery ();
L'option correcte implique la création d'une commande avec un ensemble de paramètres strictement dactylographiés. Considérez que le paragraphe précédent n'était pas.
OLEDBCOMMAND DBCOMMAND \u003d DBCONN.Createcommand (); dbcommand.commandtext \u003d "Insérer dans Test_Table (int_column, varchar_column, DateTime_Column) Valeurs (?,?,?)"; dbcommand.parameters.add ("int_column", OLEDBType.Integer) .Value \u003d Intviaable; dbcommand.parameters.add ("varchar_column", OLEDBTYPE.VARCHAR) .Value \u003d stringvariable; Si (stringdate \u003d\u003d "") ("DateTime_Column", OLEDBType.DateTetime) .Value \u003d dbnull.value;) Autres (dbcommand.parameters.add ("DateTime_Column", OLEDBTYPE.DateTetime) .value \u003d convert.todatetime (StringDate). ;) dbcommand.executenonquery ();
La procédure stockée est appelée de la même manière, les variétés pour une autre version de valeurs d'enregistrement dans les paramètres (ce n'est pas lié à la procédure stockée):
OLEDBCOMMAND SOMEDBCOMM \u003d NOUVELLE OLEDBCOMMAND ("SOMESTORDEDPROCEDURE", THIS.DBCONN); SOMEDBCOMM.COMMANDTYPE \u003d COMMANDTYPE.STARETRÉDURE; somedb.com.parameterers.add ("@ paramètre1", OLEDBTYPE.VARCHAR); somedb.com.parameters.add ("@ paramètre2", OLEDBTYPE.VARCHAR); somedbcomm.parameterers.value \u003d "(! Lang: tout problème a toujours une solution - simple, confortable et, bien sûr, erroné"; someDbComm.Parameters.Value = "Henry Luis Menken"; someDbComm.ExecuteNonQuery(); !}
Option avancée décrivant un paramètre avec une indication de la taille du champ et de la liaison à une colonne de table spécifique.
Dbcommand.parameters.add ("varchar_column", OLEDBTYPE.VARCHAR, 100, "VARCHAR_COLUMN"). Valeur \u003d stringvariable;
Si nous n'avons pas besoin d'un paramètre de commande de liaison à un champ de jeu spécifique, il est préférable de ne pas spécifier la taille en général, par exemple, si la chaîne est inférieure à la période spécifiée de Varchar, puis une sorte .NET Framewrad ajoutera à la Chaîne spatiale à la longueur spécifiée, gâcher les données transmises au serveur.
La valeur du champ Unité est lue par la méthode ExecutesCalar ()
OLEDBCOMMAND DBCOMMAND \u003d DBCONN.Createcommand (); dbcommand.commandtext \u003d "Sélectionnez Test_Column de Test_table où id_column \u003d?"; dbcommand.parameters.add ("int_column", OLEDBType.Integer) .Value \u003d Intviaable; Int résultat \u003d convert.toint32 (dbcommand.exectescalar ());
Il convient de noter notamment que ExecutesCalar renvoie un objet et si la demande n'a rien renvoyé du tout, le résultat sera null et convertir en un type de données normal volera avec une erreur. Si une situation est possible lorsque nous ne recevons rien en réponse, vous devez le faire:
OLEDBCOMMAND DBCOMMAND \u003d DBCONN.Createcommand (); dbcommand.commandtext \u003d "Sélectionnez Test_Column de Test_table où id_column \u003d?"; dbcommand.parameters.add ("int_column", OLEDBType.Integer) .Value \u003d Intviaable; Objet résultantj \u003d dbcommand.executescalar () int résultat \u003d -1; // valeur par défaut, ce qui signifie un résultat vide si (résultatd! \u003d Null) (résultat \u003d convert.toint32 (dbcommand.executescalar ());
3. Lecture séquentielle de Sélectionner une chaîne d'échantillonnage par ligne
Lire une ligne (sont quelque peu lus dans le cycle);
OLEDBCOMMAND DBCOMMAND \u003d Nouveau OLEDBCOMMAND (Sélectionnez Person_ID, Nom, Nom de famille de Test_Table, DBConn); Oledbdatreader dbreader \u003d dbcommand.executerreader (); dbreader.read (); Nom de chaîne \u003d convert.tostring (dberader ["nom"]); Chaîne nom de famille \u003d convert.tostring (dberader ["nom de famille"]); dbreader.close ();
4. Cas rare. Tableau de mise à jour automatique dans la base de données basée sur les modifications apportées à DataTable (en tant que règle modifiable via l'interface visuelle).
Vous devez vous inscrire à DBadapter Quatre commandes pour chaque cas possible - Sélectionnez, Insérer, Mettre à jour, Supprimer.
Dbadapter.insertcommand \u003d nouvelle OLEDBCOMMAND ("Insert dans Test_Table (nom, famille, âge) Valeurs (?,?,?)", Dbconnection); dbadapter.insertcommand.parameters.add ("Nom", OLEDBTYPE.VARCHAR, 100, "NOM"); dbadapter.insertcommand.parameters.add ("Famil", Oledbtype.varchars, 100, "Famil"); // pour les types de données avec une longue distance spécifiée dans la commande longue ignorée dbadapter.insercommand.parameters.add ("âge", OLEDBType.Integer, 100, "Âge"); // ajoutez un dbadapter.updatecommand \u003d nouvelle commande OLEDBCOMMAND UPDATE ("Mettre à jour test_ttable Set nom \u003d?, Famil \u003d?, Âge \u003d? Where ID \u003d?", Dbconnection); dbadapter.updatecommand.parameters.add ("Nom", OLEDBTYPE.VARCHAR, 100, "NOM"); dbadapter.updatecommand.parameters.add ("famil", OLEDBTYPE.VARCHAR, 100, "FAMIL"); dbadapter.updatecommand.parameters.Ajouter ("âge", Oledbtype.Integer, 100, "Âge"); dbadapter.updatecommand.parameters.add ("ID", OLEDBTYPE.Integer, 100, "ID"); // Ajouter un dbadapter.Deletecommand \u003d nouvelle commande OLEDBCOMMAND ("Supprimer de Test_table où ID \u003d?", DBConnection); dbadapter.deletecommand.parameters.Ajouter ("ID", OLEDBTYPE.Integer, 100, "ID"); Essayez (// Transférer toutes les modifications de DataTable à une table dans la base de données DBADAPTER.UPDATE (Tableau);) Catch (erreur d'erreur lors de l'enregistrement des données! "+ Error.message); renvoyer (" modifications enregistrées! " );