1. Qu'est-ce qu'une transaction ?
Une transaction est un mécanisme, une séquence d'opérations, qui contient un ensemble de commandes d'opération de base de données, et toutes les commandes sont soumises au système dans son ensemble.
Ou annulez la demande d'opération, c'est-à-dire que soit tout ce groupe de bases de données sera exécuté, soit aucun d'entre eux ne sera exécuté. Il est particulièrement adapté aux systèmes de bases de données exploités par plusieurs utilisateurs en même temps.
Une transaction est une série d’opérations effectuées comme une seule unité logique de travail.
Une unité logique de travail doit avoir 4 attributs :
Atomicité : une transaction est une opération complète et les éléments de la transaction ne peuvent pas être davantage divisés. Tous les éléments doivent être validés ou annulés dans leur ensemble.
Cohérence : lorsqu'une transaction est terminée, les données doivent être dans un état cohérent.
Isolation : toutes les transactions simultanées sont isolées les unes des autres lors de la modification des données.
Durabilité : Une fois la transaction terminée, l’impact sur le système est permanent.
2. Créez une transaction
Commencer la transaction : commencer la transaction
Valider la transaction : valider la transaction
Transaction d'annulation (annulation) : transaction d'annulation
code
utiliser studb
aller
s'il existe (sélectionnez * dans les objets système où nom = 'banque')
banque de table de dépôt
créer une banque de tables
(
customerName char(10), --nom du client
argent actuel --solde
)
aller
--Ajouter une contrainte de contrôle selon laquelle le solde du compte ne peut pas être inférieur à 1
modifier la banque de tables
ajouter une contrainte CK_currentMoney check(currentMoney >= 1)
aller
insérer dans les valeurs bancaires('Zhang San',1000)
insérer dans les valeurs de la banque('李思',1)
sélectionnez * dans la banque
-------------------------------------------------- ---------
--------------- * * * * 事* * 事* * * * -------------
-------------------------------------------------- ---------
utiliser studb
aller
définir nocount sur --Ne pas afficher les informations sur le numéro de ligne concerné
print 'Données avant transaction :'
sélectionnez * dans la banque
aller
commencer la transaction
déclarer @errorSum int
définir @errorSum = 0
mettre à jour la banque définie currentMoney = currentMoney-1000 où customername='Zhang San'
mettre à jour la banque définie currentMoney = currentMoney+1000 où customername='李思'
définir @errorSum = @errorSum + 1
print 'Données en transaction :'
sélectionnez * dans la banque
si @errorSum <> 0
commencer
print 'La transaction a échoué, transaction d'annulation'
transaction d'annulation
fin
autre
commencer
print 'Transaction réussie, validation de la transaction, écriture sur le disque dur, sauvegarde permanente'
valider une transaction
fin
aller
print 'Données après transaction :'
sélectionnez * dans la banque
-------------------------------------------------- ---------
--------------- * * * * Citation* * Citation* * * * -------------
-------------------------------------------------- ---------
--Index : C'est la méthode interne de SQL Server pour organiser les données
--Les index peuvent être divisés en trois types suivants :
--Indice unique : deux lignes ne peuvent pas avoir la même valeur d'index
--Indice de clé primaire : un type spécial d'index de clé primaire qui crée automatiquement un index unique lors de la définition d'une clé primaire pour une table. Chaque valeur de la clé primaire doit être unique.
--Index clusterisé : l'ordre physique des lignes du tableau est le même que l'ordre logique (index) des valeurs clés. Le tableau ne peut contenir qu'un seul index clusterisé (peut être compris comme le pinyin du dictionnaire).
--Index non clusterisé : les données et l'index contiennent des points vers les emplacements correspondants où les données sont stockées. L'ordre physique des lignes de la table ne correspond pas à l'ordre logique des valeurs clés. (peut être compris comme MAP)
--Les index clusterisés sont plus rapides que les index non clusterisés
--Il ne peut y avoir qu'un seul index clusterisé dans une table, mais il peut y avoir plusieurs index non clusterisés. Si vous définissez une colonne comme clé primaire, la colonne sera un index clusterisé par défaut.
--La table ne peut avoir aucun index et l'index de clé primaire n'est pas nécessairement un index clusterisé.
--Où l'index est-il utilisé ?
--Cette colonne est fréquemment recherchée et utilisée pour trier les données
--Le mauvais type n'a que quelques valeurs différentes et il n'y a que quelques lignes de données dans le tableau, il n'est donc pas nécessaire d'utiliser un index.
--grammaire
--create index [unique][clustered|nonclustered] index_name sur table_name (column_name[,column_name]...)
--[
-- avec fillfactor = x --Le facteur de remplissage x est une valeur comprise entre 0 et 100
--]
code
utiliser studb
aller
s'il existe (sélectionnez [nom] dans sysindexes où [nom]='IX_stuMarks_writingExam')
drop index stuMarks.IX_stuMarks_writingExam --demande si l'index existe déjà et supprime-le s'il existe
créer un index non clusterisé IX_stuMarks_writingExam sur stuMarks (writingExam)
avec fillfactor=30 --Facteur de remplissage de l'espace réservé
aller
--Requête
sélectionnez * parmi stumarks (index=IX_stuMarks_writingExam)
--Une erreur sera signalée : il y a une erreur de syntaxe près de 'index'. S'il doit faire partie d'un indicateur de table, il doit contenir le mot-clé WITH et des parenthèses, telles que :
sélectionnez * parmi les stumarks avec (index=IX_stuMarks_writingExam)
sélectionnez * parmi les stumarks avec (index=IX_stuMarks_writingExam) où writtenExam entre 60 et 90
-------------------------------------------------- ---------
--------------- * * * * Vue* * Photo* * * * ----------------
-------------------------------------------------- ---------
Vue : Il s'agit d'une table virtuelle, une méthode de requête basée sur les données d'une ou de plusieurs tables.
Fonctions générales : filtrer les lignes dans les tableaux, empêcher les utilisateurs non autorisés d'accéder aux données sensibles, résumer plusieurs tables de données physiques en une seule table de données logique
--grammaire:
--create vue nom_vue
--comme
--<instruction de sélection>
code
utiliser studb
aller
s'il existe (sélectionnez * dans sysobjects où name='view_stuinfo_stumarks')
vue déroulante view_stuinfo_stumarks
aller
créer une vue view_stuinfo_stumarks
comme
sélectionnez nom=stuname, numéro d'étudiant=stuinfo.stuno, résultat du test écrit=examenécrit, résultat du test informatique=labexam,
score moyen = (examen écrit+labexam)/2 de stuinfo gauche rejoindre stumarks sur stuinfo.stuno = stumarks.stuno
aller