Le quatrième jour d'apprentissage des bases de données

Le quatrième jour d'apprentissage des bases de données

Contenu d'aujourd'hui

1
Requête de jointure de table 2 Sous- requête
3 Transaction
4 Niveau d'isolement de la transaction
5 DCL

Requête de jointure de table

1 Qu'est-ce qu'une requête multi-table?
Par exemple, les colonnes de données que nous voulons interroger existent dans différentes tables, nous devons alors interroger plusieurs tables en même temps, cette fois, nous devons utiliser une jointure interne de
classification de requête multi-table 2 requête multi-table
(1):
* Jointure interne implicite
* Jointure interne explicite
(2) Jointure externe:
* Jointure externe gauche
* Jointure externe droite
3 Phénomène de produit cartésien
Si nous interrogeons deux tables en même temps sans aucun traitement, toutes les combinaisons de toutes les données des deux tables apparaîtront. .
Insérez la description de l'image ici
4 Comment faire face au phénomène du produit cartésien?
Nous avons constaté que toutes les données de la table de la figure ci-dessus ne sont pas utiles, seules les données dont dept_id dans la table employee est égal à l'id dans la table department sont utiles,
vous pouvez donc écrire et ajouter des conditions comme celle-ci: sélectionnez emp .nom, département namede emp, département où emp. dept_id= département id;

Connexion interne

Utilisez les enregistrements de la table de gauche pour faire correspondre les enregistrements de la table de droite. Si les conditions sont remplies, elles seront affichées sous forme de table. Clé étrangère = table primaire. Clé primaire

Jointure interne implicite

Vous ne pouvez pas voir la clé de jointure. Utilisez where pour spécifier le
nom du champ SELECT FROM table de gauche et table de droite WHERE conditions
telles que: select * from emp, dept where emp. dept_id= Dept id.;
Insérez la description de l'image ici
Ici, vous pouvez voir les données de l'employé table et la table des départements Les données ne seront pas affichées tant qu'elles ne correspondent pas.

Jointure interne explicite

Utiliser la jointure interne sur l'instruction, vous pouvez omettre le
nom du champ SELECT interne FROM table de gauche [INNER] JOIN table de droite ON conditions
telles que: select * from emp e jointure interne dept d sur e. dept_id= D id.;
Insérez la description de l'image ici

Résumer les étapes de fonctionnement de la connexion interne

(1) Déterminez quelles tables interroger?
(2) Déterminer la condition de la connexion
(3) Déterminer la condition de la requête
(4) Déterminer le champ de la requête

Jointure externe gauche

Lorsque nous utilisons le tableau de gauche pour faire correspondre le tableau de droite, ceux qui remplissent les conditions sont affichés, et ceux qui ne remplissent pas les conditions sont affichés comme null, ce qui signifie que tout le contenu du tableau de gauche et l'intersection des tables de gauche et de droite est affichée., Et puis considérez la table de droite, même s'il y a des données qui ne remplissent pas les conditions de la table de droite, elles seront ajoutées à la table, et nul est affiché là où il ne le fait pas.
Par exemple, nous avons ajouté un département des ventes à la table des départements ci-dessus, mais aucun employé n'appartient à ce département, mais nous devons nous assurer que tous les départements sont affichés:
sélectionnez * à partir du département à gauche rejoindre emp e on d. id= E dept_id.;
Insérez la description de l'image ici

Jointure externe droite

La même raison que la jointure externe gauche, en fait, il suffit d'en maîtriser une. Dans le travail, la jointure externe gauche est souvent utilisée, et la table de la jointure externe droite est déplacée vers la gauche et la jointure externe gauche est utilisée, le même.
Syntaxe: SELECT nom du champ FROM table gauche RIGHT [OUTER] JOIN table droite ON condition

Sous-requête

concept:

1 Utilisez le résultat d'une requête comme condition d'une autre requête.
2 Il existe des requêtes imbriquées et la requête interne s'appelle une sous-requête.
3 La sous-requête doit utiliser des parenthèses. Par
exemple, nous devons rechercher qui sont dans le service de développement .
Si nous utilisons des méthodes ordinaires:
sélectionnez id from dept where name = 'Development department'; ici pour trouver l'id du département de développement,
sélectionnez name from emp où dept_id = 1; ici pour connaître les employés du département de développement,
mais vous pouvez le faire en une seule étape en utilisant une sous-requête:
select name from emp where dept_id = (select id from dept where name = 'Development Department');

Trois résultats de la sous-requête

1 Le résultat de la sous-requête est une seule ligne et une seule colonne
Insérez la description de l'image ici

2 Le résultat est plusieurs lignes et une seule colonne
Insérez la description de l'image ici
3 Le résultat est plusieurs lignes et plusieurs colonnes
Insérez la description de l'image ici

Il existe différentes manières d'utiliser les trois résultats:
(1) Une seule ligne et une seule colonne: le résultat est utilisé comme données.
Comme dans l'exemple ci-dessus: sélectionnez le nom de emp où dept_id = (sélectionnez l'id du département où name = 'Development Department' );
(2) Plusieurs lignes et une seule colonne: le jeu de résultats est similaire à un tableau et la requête parent utilise l'opérateur IN. Par
exemple, recherchez les noms des employés dont le salaire est supérieur à 5 000 et de quel service ils proviennent
- interrogez d'abord l'ID du service des employés dont le
salaire est supérieur à 5000 sélectionnez dept_id à partir de emp où salaire> 5000; -interrogez
le nom du service dans ces identifiants de service
sélectionnez le nom du département où l'ID est (sélectionnez dept_id à partir de emp où salaire> 5000) ;
(3) Plusieurs lignes et plusieurs colonnes: tant que le résultat de la sous-requête a plusieurs colonnes, il doit être dans FROM est utilisé comme table, ici comme table virtuelle, donc un alias est nécessaire, sinon il n'est pas accessible. Pour
exemple: interroger les informations des employés qui ont rejoint après 2011, y compris le nom du service
-rechercher les informations des employés qui ont rejoint après 2011, y compris le nom du service
-Interroger les employés qui ont rejoint après 2011-1-1 dans le tableau des employés
sélectionnez * à partir de emp où join_date> = '2011-1-1';
-Rechercher toutes les informations de département, combiner avec les informations dans la table virtuelle ci-dessus, trouver Dept_id où tous les identifiants de département sont égaux à
sélectionnez * dans le département d, (sélectionnez * dans emp où join_date> = '2011-1-1') e où
d. id= e.dept_id;

Résumé des sous-requêtes

(1) Tant que le résultat de la sous-requête est une seule colonne, il sera utilisé comme condition après WHERE
(2) Tant que le résultat de la sous-requête est composé de plusieurs colonnes, il sera utilisé comme table après FROM pour la requête secondaire

Affaires

Voici un scénario d'application. Si une personne se rend à la banque pour transférer de l'argent, mais qu'une fois que l'argent a été déduit, il y a un échec. Si le mouvement n'est pas utilisé à ce moment-là, l'action d'ajouter de l'argent à un autre compte ne sera pas être exécuté, et l'argent sera déduit!

concept

L'exécution de la transaction est un tout et toutes les instructions SQL doivent être exécutées avec succès. Si une exception se produit dans l'une des instructions SQL, toutes
les instructions SQL doivent être annulées et l'ensemble de l'exécution de l'entreprise échoue.

Validez la transaction manuellement

La syntaxe de la validation manuelle de la
Insérez la description de l'image ici
transaction L'exécution de la
Insérez la description de l'image ici
transaction Après l'ouverture de la transaction, vous pouvez commencer à écrire n'importe quelle instruction SQL, puis juger du résultat, en cas de succès, écrire la validation pour la validation, en cas d'échec, écrire la restauration pour revenir en arrière

Transaction de validation automatique

MySQL par défaut, chaque instruction DML (CRUD) est une transaction distincte, chaque instruction ouvrira automatiquement une transaction, l'instruction est terminée
automatiquement valider la transaction, MySQL par défaut démarre automatiquement soumettre la transaction
Insérez la description de l'image ici
pour voir s'il faut ouvrir MySQL réellement commit
Insérez la description de l'image ici
@@ représente le global Variable, 1 signifie activé, 0 signifie désactivé,
annuler la transaction de validation automatique
Insérez la description de l'image ici

Point de retour en arrière

Quel est le point de retour en arrière

Une fois que certaines opérations réussies sont terminées, les opérations suivantes peuvent réussir ou échouer, mais quel que soit le succès ou l'échec, les opérations précédentes ont
réussi et un point de restauration peut être défini à la position actuelle réussie. Il peut être utilisé pour les opérations ayant échoué suivantes pour revenir à cette position au lieu de revenir à toutes les opérations. Ce point est appelé
point de retour arrière.

Instruction d'opération pour le point de restauration

Insérez la description de l'image ici

Fonctionnement spécifique

  1. Restaurer les données à 1000
  2. Transaction ouverte
  3. Laissez le compte de Zhang San déduire 3 fois, 10 yuans à chaque fois
  4. Définissez le point de restauration: savepoint three_times;
  5. Laissez le compte de Zhang San déduire 4 fois, 10 yuans à chaque fois
  6. Revenir au point de restauration: retour à trois heures;
  7. Analyse du processus d'exécution
    Résumé: La définition du point de restauration nous permet de revenir au point de restauration en cas d'échec, plutôt qu'au démarrage de la transaction.

Niveau d'isolement de la transaction (comprendre)

Quatre caractéristiques de la transaction ACID (à retenir)

Insérez la description de l'image ici

Problèmes causés par la concurrence Insérez la description de l'image ici

La base de données MySQL a quatre niveaux d'isolement

Insérez la description de l'image ici
Plus le niveau d'isolement est élevé, plus les performances sont mauvaises et plus la sécurité est élevée

Commandes liées au niveau d'isolation des transactions MySQL

Interrogez le niveau d'isolement sélectionnez @@ tx_isolation;
définissez le niveau d'isolement définir la chaîne de niveau d'isolation des transactions globales;
par exemple: définir le niveau d'isolement global des transactions lu non validé;

DCL

Nous utilisons maintenant l'utilisateur root par défaut, le super administrateur, qui a toutes les autorisations. Cependant, le serveur de base de données d'une entreprise
peut exécuter les bases de données de nombreux projets en même temps. Par conséquent, nous devrions être en mesure de créer différents utilisateurs en fonction de différents projets et d'attribuer différentes autorisations pour
gérer et maintenir la base de données.
Remarque: mysqld est le programme principal de MySQL, côté serveur. mysql est un outil de ligne de commande et un client pour MySQL.
Insérez la description de l'image ici

Créer un utilisateur

Syntaxe:
CREATE USER'user name '@' host name 'IDENTIFIED BY'password';
Description du mot-clé:
Insérez la description de l'image ici
opération spécifique:
créer utilisateur1 utilisateur, vous ne pouvez vous connecter au serveur mysql que sur localhost, le mot de passe est 123
create user'user1 ' @ 'localhost' identifié par '123';
Create user2 Les utilisateurs peuvent se connecter au serveur mysql sur n'importe quel ordinateur, le mot de passe est 123
create user'user2 '@'% 'identifié par' 123 ';
== Remarque, si vous le souhaitez pour afficher les informations de l'utilisateur, vous pouvez ouvrir la table des utilisateurs dans la bibliothèque mysql pour afficher

Autoriser les utilisateurs

Syntaxe:
GRANT permission 1, permission 2 ... ON nom de la base de données. Nom de la table TO'nom d'utilisateur '@' nom d'hôte ';
description du mot-clé:
Insérez la description de l'image ici
opération spécifique:
attribuer les droits d'utilisateur de l'utilisateur1 à l'opération de test de la base de données: créer une table, modifier la table , Insérer un enregistrement, mettre à jour un enregistrement,
créer une requête , modifier, insérer, mettre à jour, sélectionner lors du test. * To'user1 '@' localhost ';
Le nom d'utilisateur et le nom d'hôte doivent être les mêmes que ceux créés ci-dessus, avec des guillemets simples.
Attribuez toutes les autorisations à l'utilisateur user2, pour toutes les tables de toutes les bases de données
Insérez la description de l'image ici

Révoquer l'autorisation

Syntaxe:
autorité REVOKE 1, autorité 2 ... base de données ON. Nom de la table révoquer tout lors du test. * From'user1 '@' localhost ';' nom d'utilisateur '@'
nom d' hôte ';
description du mot-clé:
Insérez la description de l'image ici
opération spécifique:
révoquer l'utilisateur1 utilisateur paire de bases de données d'autorité de test d'opération de toutes les tables
. révoquer tout sur test * de ' user1' @ 'localhost';
Le nom d'utilisateur et le nom d'hôte doivent être les mêmes que lors de leur création, et chacun doit être placé entre guillemets simples

Afficher les autorisations

Syntaxe:
SHOW GRANTS FOR'Username '@' Hostname ';

supprimer des utilisateurs

Syntaxe:
DROP USER'username '@' hostname ';
si vous oubliez le mot de passe de l'administrateur, il existe un moyen pour les solutions générales de mot de passe root. Voir les notes pour plus de détails.

Je suppose que tu aimes

Origine blog.csdn.net/m0_54814599/article/details/115288135
conseillé
Classement