Diese "Teekanne" ist entweder MySQL für Anfänger gewidmet. Grundlagen der Bauen von SQL-Anfragen

  • Lernprogramm

Was ist das Lehrbuch?

Dieses Lehrbuch ist so etwas wie ein "Stempel meines Gedächtnisses" in SQL (DDL, DML), d. H. Dies ist die Informationen, die sich im Rahmen der beruflichen Tätigkeit angesammelt und ständig in meinem Kopf gelagert. Dies ist ein ausreichendes Minimum für mich, das am häufigsten mit Datenbanken mit Datenbanken verwendet wird. Wenn es notwendig ist, mehr kompletter SQL-Designs anzuwenden, appellieren Sie normalerweise an die MSDN-Bibliothek im Internet. Meiner Meinung nach ist es sehr schwierig, alles in meinem Kopf zu behalten, und es gibt kein besonderes Bedürfnis dafür. Aber das Wissen, dass die grundlegenden Designs sehr nützlich sind, weil Sie gelten intern in derselben Form in vielen relationalen Datenbanken wie Oracle, MySQL, Firebird. Die Unterschiede bestehen hauptsächlich aus Datentypen, die sich detailliert unterscheiden können. Die Hauptkonstruktionen der SQL-Sprache sind nicht so sehr, und mit ständiger Praxis werden sie schnell erinnert. Um Objekte (Tabellen, Einschränkungen, Indizes usw.) zu erstellen, reicht beispielsweise aus, um zur Verfügung zu haben texteditor Umgebungen (IDE), um mit der Datenbank zu arbeiten, und es ist nicht erforderlich, das visuelle Toolkit zu studieren, um mit einem bestimmten Datenbanktyp (MS SQL, Oracle, MySQL, Firebird, ...) zu arbeiten. Es ist praktisch und die Tatsache, dass sich der gesamte Text vor den Augen befindet, und Sie müssen nicht auf zahlreichen Registerkarten ausführen, um beispielsweise einen Index oder eine Einschränkung zu erstellen. Wenn Sie ständig mit der Datenbank arbeiten, erstellen, ändern, ändern und vor allem das Objekt mithilfe der Skripts mithilfe von Skripts, zeitweise schneller ist, als wenn Sie im visuellen Modus tun. Auch im Scripting-Modus (entsprechend mit fälliger Genauigkeit) ist es einfacher, die Regeln für den Namen von Objekten (meine subjektive Meinung) einzustellen und zu steuern. Außerdem werden die Skripts bequem in dem Fall verwendet, wenn die in einer Datenbank (z. B. Test) vorgenommenen Änderungen in derselben Form an einer anderen Basis (produktiv) übertragen werden müssen.

Die SQL-Sprache ist in mehrere Teile unterteilt, hier werde ich 2 wichtige Teile in Betracht ziehen:
  • DML - Datenmanipulationssprache (Datenmanipulationssprache), die die folgenden Konstruktionen enthält:
    • Wählen Sie - Datenabtastung
    • Einfügen - Neue Daten einfügen
    • Update - Data Update
    • Löschen - Daten löschen
    • Merge - Data Merge
weil Ich bin der Praktizierende, wie solche Theorie in diesem Lehrbuch wenig sein wird, und alle Designs werden in praktischen Beispielen erläutert. Darüber hinaus glaube ich, dass die Programmiersprache und vor allem SQL nur in der Praxis beherrscht werden kann, um es selbst zu besprüht und zu realisieren, was passiert, wenn Sie dies oder dieses Design ausführen.

Dieses Lehrbuch wurde auf dem Prinzip von Schritt für Schritt erstellt, d. H. Es ist notwendig, es konsequent und wünschenswert zu lesen, um sofort Beispiele auszuführen. Wenn Sie jedoch eine bestimmte Internet-Suche in der MSDN-Bibliothek etwas über ein Team erfahren müssen, müssen Sie eine bestimmte Internetsuche verwenden.

Beim Schreiben dieses Lehrbuchs wurde die Datenbank von MS SQL Server Version 2014 verwendet, ich habe das MS SQL Server Management Studio (SSMS) verwendet, um Skripts auszuführen.

Kurz über MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) - ein Dienstprogramm für Microsoft SQL Server, um die Datenbankkomponenten zu konfigurieren, zu verwalten und zu verwalten. Dieses Dienstprogramm enthält den Skript-Editor (der meistens verwendet wird) und ein grafisches Programm, das mit Objekten und Servereinstellungen arbeitet. Das Haupt-SQL Server-Management-Studio-Tool ist der Object Explorer, mit dem der Benutzer Serverobjekte anzeigen, extrahieren kann, sowie verwalten Sie sie. Dieser Text ist teilweise aus Wikipedia geliehen.

Um einen neuen Skript-Editor zu erstellen, verwenden Sie die Schaltfläche "Neue Abfrage / Neue Anforderung":

Um die aktuelle Datenbank zu ändern, können Sie die Dropdown-Liste verwenden:

Um einen bestimmten Befehl (oder eine Gruppe von Befehlen) auszuführen, wählen Sie sie aus und drücken Sie die Taste EXECUTE / RUN oder die Taste "F5". Wenn sich derzeit nur ein Befehl im Editor befindet, oder Sie müssen alle Befehle erfüllen, müssen Sie nichts zuweisen.

Verwenden Sie nach der Ausführung von Skripts, insbesondere auf Objekte (Tabellen, Spalten, Indexen), um die Änderungen anzuzeigen, das Update aus dem Kontextmenü, indem Sie die entsprechende Gruppe (z. B. die Tabelle), die Tabelle selbst oder die Säulengruppe darin auswählen.

Eigentlich müssen wir nur für die Implementierung der hier angegebenen Beispiele wissen. Der Rest entlang des SSMS-Dienstprogramms ist einfach, unabhängig zu erlernen.

Ein bisschen Theorie

Die relationale Datenbank (RBD oder weiter im Kontext einfacher Datenbank) ist ein Satz von Tabellen, die sich miteinander beziehen. Wenn wir ruckely sagen, ist die Datenbank eine Datei, in der die Daten in strukturierter Form gespeichert sind.

DBMS - Steuerungssystem dieser Datenbanken, d. H. Dies ist ein Satz von Werkzeugen, um mit einer bestimmten Art von Datenbank (MS SQL, Oracle, MySQL, Firebird, ...) zu arbeiten.

Hinweis
weil Im Leben sagen wir in der Gesprächsrede meistens: "Oracle-Datenbank oder sogar nur" Oracle ", eigentlich" Oracle dbms ", dann wird in dem Kontext dieses Lehrbuchs die Laufzeitdatenbank manchmal verwendet. Aus dem Kontext denke ich, dass es versteht, was genau in Frage steht.

Die Tabelle ist ein Satz von Säulen. Spalten, können auch Felder oder Spalten aufrufen, alle diese Wörter werden als Synonyme verwendet, um das Gleiche auszudrücken.

Die Tabelle ist das Haupt-RBD-Objekt, alle RBD-Daten werden in den Tabellenspalten gespeichert. Reihen, Datensätze sind auch Synonyme.

Für jede Tabelle erhalten Sie als und seine Säulen die Namen, für die sie anschließend zu ihnen gehen.
Objektname (Tabellenname, Spaltenname, Indexname usw.) in MS SQL kann eine maximale Länge von 128 Zeichen aufweisen.

Als Referenz - Die Oracle-Datenbanknamen können die maximale Länge von 30 Zeichen aufweisen. Daher müssen Sie für eine bestimmte Datenbank Ihre Regeln für den Namen von Objekten entwickeln, um das Limit durch die Anzahl der Zeichen zu erfüllen.

SQL ist eine Sprache, mit der Sie Anforderungen in der Datenbank über DBMS durchführen können. In einem bestimmten DBMS kann SQL-Sprache eine bestimmte Implementierung (Seiner Dialekt) haben.

DDL und DML - Teilmenge der SQL-Sprache:

  • DDL-Sprache wird zum Erstellen und Ändern der Struktur der Datenbank verwendet, d. H. So erstellen / ändern / löschen Tabellen und Verbindungen.
  • DML-Sprache ermöglicht Manipulationen mit Datendaten, d. H. Mit ihren Reihen. Ermöglicht das Erstellen eines Datenprobens von den Tabellen, fügen Sie der Tabelle neue Daten hinzu, sowie aktualisieren und aktualisieren Sie vorhandene Daten.

In SQL können Sie 2 Arten von Kommentaren (Single-Line und Multi-Line) verwenden:

Single-Line-Kommentar
und

/ * Multi-Line-Kommentar * /

Eigentlich wird alles für die Theorie davon ausreichen.

DDL - Datendefinitionssprache (Datenbeschreibung Sprache)

Betrachten Sie beispielsweise den Tisch mit den Daten der Mitarbeiter, in der üblichen Person, die kein Programmiererformular ist:

In diesem Fall haben die Spalten der Tabelle die folgenden Namen: Tabel-Nummer, vollständiger Name, Geburtsdatum, E-Mail, Position, Abteilung.

Jede dieser Säulen kann durch die Art der darin enthaltenen Daten gekennzeichnet sein:

  • Tabel-Nummer - Ganzzahl
  • Vollständiger Name - Zeichenfolge
  • Geburtsdatum - Datum
  • E-Mail-Zeichenfolge
  • Position - String.
  • Abteilung - String.
Der Typ der Spalte ist ein Merkmal, das von der Art von Daten diese Spalte spezielle, spricht.

Um damit zu beginnen, reicht es aus, um sich an die folgenden Hauptdatentypen zu erinnern, die in MS SQL verwendet werden:

Wert MS SQL-Bezeichnung. Beschreibung
Reihe variabler Länge varchar (n)
und
Nvarchar (n)
Mit n-Nummer n können wir die maximal mögliche Zeichenfolgenlänge für die entsprechende Spalte angeben. Wenn wir beispielsweise sagen möchten, dass der Wert des Spaltens "Vollständiger Name" maximal 30 Zeichen enthalten kann, ist es erforderlich, den Typ NVARCHAR (30) anzugeben.
Die Differenz zwischen VARCHAR von NVARCHAR liegt in der Tatsache, dass VARCHAR Sie ermöglicht, Zeilen im ASCII-Format zu speichern, wobei ein Zeichen 1 Byte annimmt, und nvarchar speichert Zeichenfolgen im Unicode-Format, in denen jedes Zeichen 2 Bytes dauert.
Der VARCHAR-Typ sollte nur verwendet werden, wenn Sie zu 100% sicher sind, dass dieses Feld keine Unicode-Zeichen speichern muss. Beispielsweise kann VARCHAR verwendet werden, um Adressen zu speichern emailweil Sie enthalten normalerweise nur ASCII-Zeichen.
Zeichenfolge feste Länge char (n)
und
Nchar (n)
Aus der Zeichenfolge mit variabler Länge ist dieser Typ dadurch gekennzeichnet, dass, wenn die Länge der Leitung weniger als n Zeichen beträgt, immer nach rechts auf die Länge n Räume ergänzt und in dieser Form in der Datenbank bleibt, d. H. In der Datenbank belegt es genau n Zeichen (wenn ein Zeichen 1 Byte für KAR und 2 Bytes für den Ncharktyp annimmt). In meiner Praxis wird dieser Typ sehr selten verwendet, und wenn verwendet wird, wird es hauptsächlich im Zeichen-Format (1) verwendet, d. H. Wenn das Feld durch ein Zeichen bestimmt wird.
Ganze Zahl int. Mit diesem Typ können wir nur Ganzzahlen in der Spalte verwenden, sowohl positiv als auch negativ. Für Referenz (jetzt ist es nicht so relevant für uns) - der Anzahl der Zahlen, die den Typ int von -2 147 483 648 bis 2 147 483 647 ermöglichen. Dies ist in der Regel der Haupttyp, der zur Angabe von Kennungen verwendet wird.
Echt oder gültig schweben. Wenn wir reden einfache SpracheDies ist die Zahlen, in denen ein Dezimalpunkt (Komma) vorhanden sein kann.
Datum datum. Wenn die Spalte nur das Datum gespeichert werden muss, das aus drei Komponenten besteht: Zahlen, Monat und Jahr. Zum Beispiel, 15.02.2014 (15. Februar 2014). Dieser Typ kann für das Spalten "Empfangsdatum" verwendet werden, das "Geburtsdatum" usw., d. H. In Fällen, in denen es wichtig ist, dass es uns wichtig ist, nur das Datum zu beheben, oder wenn die Bestandszeit für uns nicht wichtig ist, und es kann verworfen werden oder wenn es nicht bekannt ist.
Zeit zeit. Dieser Typ kann verwendet werden, wenn die Spalte nur Zeitdaten speichern muss, d. H. Uhren, Minuten, Sekunden und Millisekunden. Zum Beispiel 17: 38: 31.3231603
Zum Beispiel tägliche "Abflugzeit".
Datum (und Uhrzeit terminzeit. Mit diesem Typ können Sie gleichzeitig das Datum und die Uhrzeit speichern. Zum Beispiel, 15.02.2014 17: 38: 31.323
Dies kann beispielsweise Datum und Uhrzeit einiger Ereignisse sein.
Flagge bisschen. Dieser Typ ist praktisch, um die Speicherung von Werten des Typs "Ja" / "Nein" zu beantragen, wobei "Ja" als 1 gespeichert wird, jedoch nicht "wird als 0 gespeichert.

Derselbe Feldwert, wenn es nicht verboten ist, kann es nicht angegeben werden, dass für diesen Zweck kein Nullwort verwendet wird.

Um Beispiele auszuführen, erstellen Sie eine Testdatenbank mit dem Namen Test.

Sie können eine einfache Datenbank erstellen (ohne zusätzliche Parameter angeben), indem Sie den folgenden Befehl ausführen:

Datenbankprüfung erstellen.
Sie können die Datenbank mit dem Befehl entfernen (es lohnt sich sehr vorsichtig mit diesem Befehl):

Drop-Datenbank-Test.
Um in unsere Datenbank wechseln zu können, können Sie den Befehl ausführen:

Testen Sie den Test.
Oder wählen Sie die Testdatenbank in der Dropdown-Liste im SSMS-Menübereich aus. Wenn ich arbeite, wird häufig verwendet, dass dieses Verfahren zum Umschalten zwischen Datenbanken verwendet wird.

In unserer Datenbank können wir nun eine Tabelle mit Beschreibungen erstellen, da sie mit Lücken und Symbolen von kyrillisch sind:

Erstellen Sie Tabelle [Mitarbeiter] ([Tabel-Nummer] int, [Name] Nvarchar (30), [Geburtsdatum] Datum, Nvarchar (30), [Position] Nvarchar (30), [Abteilung] Nvarchar (30))
In diesem Fall müssen wir Namen in eckigen Klammern [...] abschließen.

In der Datenbank für mehr Komfort können jedoch alle Namen der Objekte besser auf das Latein eingestellt und die Lücken in den Namen nicht verwenden. In MS SQL beginnt in diesem Fall jedes Wort mit einem Großbuchstaben, z. B. für das Feld "TABEL NUMMER", wir könnten den Namen Personnelzahl einstellen. Auch in dem Namen, den Sie verwenden können, z. B. PHONENNUMMERN1.

Auf eine Notiz
In einigen DBMS kann das folgende "Telefon-Namensformat" phone_number "zuvor bevorzugter sein, beispielsweise wird ein solches Format häufig in der Oracle-Datenbank verwendet. Wenn Sie den Namen des Felds angeben, ist es natürlich wünschenswert, dass es nicht mit den in der DBMS verwendeten Keywords zusammenfällt.

Aus diesem Grund können Sie die Syntax mit eckigen Klammern vergessen und die Tabelle löschen [Mitarbeiter]:

Tropfentabelle [Mitarbeiter]
Beispielsweise kann ein Tisch mit Mitarbeitern als "Mitarbeiter" bezeichnet werden, und ihre Felder können die folgenden Namen erstellt werden:

  • ID - Tabel-Nummer (Mitarbeiterkennung)
  • Name - vollständiger Name
  • Geburtstag - Geburtsdatum
  • Email Email
  • Position - Position.
  • Abteilung - Abteilung.
Sehr oft wird die Word-ID verwendet, um das Identifizierfeld zu nennen.

Nun schaffen wir unseren Tisch:

Erstellen von Tabellenmitarbeitern (ID INT, Name Nvarchar (30), Geburtstagstermin, E-Mail Nvarchar (30), Position Nvarchar (30), Abteilung Nvarchar (30))
Um die erforderlichen Spalten aufzufüllen, können Sie die Option NICHT NULL verwenden.

Für eine bereits vorhandene Feldtabelle können Sie mit den folgenden Befehlen überschreiben:

Feldaktualisierung ID Alter Tabelle Angestellte Alter Spalten ID int nicht null - Aktualisierungsname Alter Tabelle Angestellte Alter Spaltenname nvarchar (30) nicht null

Auf eine Notiz
Das Gesamtkonzept der SQL-Sprache für die meisten DBMS bleibt gleich (zumindest dabei kann ich die DBMS beurteilen, mit der ich mit der Arbeit geleistet habe). Differenz DDL in verschiedenen DBMSs werden hauptsächlich in Datentypen abgeschlossen (möglicherweise nicht nur ihre Namen, sondern auch die Teile ihrer Implementierung), die Spezifität der SQL-Sprache (dh das Wesen der Teams allein kann sich leicht abweichen. Aber Es kann kleine Unterschiede in dem Dialekt, Alas geben, aber es gibt keinen Standard). Besitzen der Grundlagen von SQL Sie können leicht von einem DBMs zu einem anderen wechseln, da In diesem Fall müssen Sie nur die Details der Implementierung von Befehlen in der neuen DBMS herausfinden, d. H. In den meisten Fällen reicht es aus, einfach eine Analogie auszuführen.

Erstellen einer erstellten Tabelle Mitarbeitertabelle (ID INT - in Oracle Type Int - Dies ist der Äquivalent (Wrapper) für die Nummer (38) Name NvarChar2 (30), - nvarchar2 in Oracle, der dem NVARCHAR in MS SQL-Geburtstagsdatum, E-Mail NVARChar2 (30 ), Position nvarchar2 (30), Abteilung nvarchar2 (30)); - Aktualisieren der ID- und Namensfelder (hier anstelle von ALTERS-Säule verwenden Änderung (...)) Ändern von Tabellen-Angestellten ändern (IDENT INT Null, Name nvarchar2 (30) nicht null); - Hinzufügen von PK (In diesem Fall sieht das Design aus, wie in MS SQL, es wird unten gezeigt) ALTER TABLE-Mitarbeiter Hinzufügen CONSTRINT PK_MEOUSEES Primärschlüssel (ID);
Für Oracle gibt es Unterschiede bei der Implementierung des VARCHAR2-Typs, seine Kodierung hängt von den Datenbankeinstellungen ab und der Text kann beispielsweise in der UTF-8-codierung gespeichert werden. Darüber hinaus kann die Länge des Feldes in Oracle sowohl in Bytes als auch in Zeichen eingestellt werden, dazu werden zusätzliche Optionen Byte und Char verwendet, die nach der Feldlänge angezeigt werden, beispielsweise:

Name VARCAR2 (30 Byte) - Die Feldkapazität ist gleich 30 Bytes des Namens Varchar2 (30 char) - die Feldkapazität entspricht 30 Zeichen
Welche Option wird standardmäßig Byte oder CHAR verwendet, wenn eine einfache Spezifikation in Oracle Type VARCAR2 (30) von den Datenbankeinstellungen abhängt, kann es auch in den IDE-Einstellungen eingestellt werden. Im Allgemeinen können Sie leicht verwirrt werden, so dass im Falle von Oracle, wenn der VARCAR2-Typ verwendet wird (und dies manchmal gerechtfertigt ist, beispielsweise bei Verwendung der UTF-8-Kodierung), bevorzugen ich, dass ich CHAR (weil die Zeichenfolge ist in der Regel bequemer, um in den Symbolen zu lesen).

Wenn jedoch in diesem Fall jedoch Daten in der Tabelle vorhanden sind, ist es für eine erfolgreiche Ausführung von Befehlen erforderlich, dass in allen Reihen der ID- und Namensfeldtabellen abgeschlossen sind. Wir zeigen dies im Beispiel, legen Sie die Daten in die Tabelle in das ID-Feld, die Position und Abteilung ein. Dies kann durch das folgende Skript erfolgen:

Einfügen von Mitarbeitern (ID, Position, Abteilung) Werte (1000, N "Director", N "Administration"), (1001, N "Programmierer", N "IT"), (1002, N "Buchhalter", N " Buchhaltung "), (1003, n" leitender Programmierer ", n" it ")
In diesem Fall ergibt sich der Befehl einfügen auch einen Fehler, da Beim Einfügen haben wir nicht die Werte des gewünschten Namensfelds angemeldet.
Wenn wir diese Daten in der Originaltabelle hätten, ist die Änderstabelle der Änderungspalten-ID int nicht Null-Befehl erfolgreich, und die ALTER-Tabelle-Mitarbeiter ändert die Spalte Namente nicht NULL-Befehl eine Fehlermeldung, die "ALTER-Tabelle-Mitarbeiter ändern sich Spaltenname int nicht null "Befehl, der in dem Feld Name gibt es null (nicht angegeben) Werte.

Fügen Sie Werte für das Feld Name hinzu und drehen Sie die Daten erneut:


Die Option NICHT NULL kann auch direkt beim Erstellen verwendet werden neue Tabelle. Im Kontext des Befehls erstellen.

Löschen Sie zuerst die Tabelle mit dem Befehl:

Drop Table-Mitarbeiter.
Erstellen Sie nun eine Tabelle mit obligatorischer Säulen-ID und -Name:

Erstellen von Tabellenmitarbeitern (ID INT Null, Name Nvarchar (30) Nicht Null, Geburtstagstermin, E-Mail Nvarchar (30), Position Nvarchar (30), Abteilung Nvarchar (30))
Sie können auch nach dem Namen des Spaltennamens, um NULL zu schreiben, was bedeutet, dass Null-Werte nicht zulässig sind (nicht angegeben), dies ist jedoch nicht erforderlich, da diese Eigenschaft standardmäßig gemeint ist.

Wenn im Gegenteil dafür erforderlich ist, eine vorhandene Spalte optional zum Füllen zu erstellen, verwenden wir die folgende Befehlssyntax:

ALTER TABLE MITARBEITER ÄNDERN Säulname Nvarchar (30) NULL
Oder einfach:

ALTER TABLE MITARBEITER ÄNDERN Säulname Nvarchar (30)
Dieser Befehl können wir auch die Art des Felds an einen anderen kompatiblen Typ ändern oder seine Länge ändern. Lassen Sie uns beispielsweise das Namensfeld bis zu 50 Zeichen erweitern:

ALTER TABLE MITARBEITER ÄNDERN SENDENNAME NVARCHAR (50)

Primärschlüssel

Beim Erstellen einer Tabelle ist es wünschenswert, dass es über eine eindeutige Säule oder ein Satz von Spalten verfügt, das für jede seiner Zeilen eindeutig ist - auf diesem eindeutigen Wert kann eindeutig identifiziert werden. Dieser Wert wird als Primärschlüssel der Tabelle bezeichnet. Für unsere Mitarbeiter-Tabelle kann ein solcher eindeutiger Wert die ID-Spalte sein (die die Tabellennummer "der Mitarbeiter" enthält - lassen Sie es in unserem Fall, dass der Wert für jeden Mitarbeiter eindeutig ist und nicht wiederholt werden kann).

Erstellen Sie einen primären Schlüssel an eine vorhandene Tabelle kann den Befehl verwenden:

ALTER TABLE-MITARBEITER ABDECKEN SIE CONSTRAINT PK_MOUNTESEES Primärschlüssel (ID)
Wo "pk_empoteies" der Name der für den Primärschlüssel zuständigen Restriktion ist. In der Regel wird das Präfix "pk_" verwendet, um den primären Schlüssel zu benennen, danach der Tabellenname kommt.

Wenn der Primärschlüssel aus mehreren Feldern besteht, müssen diese Felder über ein Komma in Klammern aufgelistet werden:

ALTER TABLE Name_Table Add Constraint Primary Key Name (Feld1, Feld 2, ...)
Es ist erwähnenswert, dass in MS SQL alle in dem Primärschlüssel enthaltene Felder ein nicht null-Kennzeichen aufweisen müssen.

Der Primärschlüssel kann auch direkt beim Erstellen einer Tabelle definiert werden, d. H. Im Kontext des Befehls erstellen. Löschen Sie den Tisch:

Drop Table-Mitarbeiter.
Und erstellen Sie es dann mit der folgenden Syntax:

Erstellen von Tabellen-Mitarbeitern (ID INT Null, Name Nvarchar (30) Nicht NULL, Geburtstagstermin, E-Mail Nvarchar (30), Position Nvarchar (30), Abteilung Nvarchar (30), Constrace PK_MEOLEES-Primärschlüssel (ID) - Beschreiben Sie doch pk Felder wie Begrenzung)
Nachdem Sie eine Mulde in der Tabelle erstellt haben:

Einfügen von Mitarbeitern (ID, Position, Abteilung, Namen, Name) (1000, N "Director", N "Administration", N "Ivanov I.I."), (1001, N "Programmierer", N "IT", N "Petrov PP "), (1002, n" Buchhalter ", n" Buchhaltung ", n" Sidorov SS "), (1003, N" Senior Programmer ", N" IT ", N" Andreev A. Aber. ")
Wenn der Primärschlüssel in der Tabelle nur der Werte einer Spalte besteht, können Sie die folgende Syntax verwenden:

Erstellen von Tabellen-Mitarbeitern (ID INT INT Null Constrace PK_MOUNTOWEES-Primärschlüssel, - Geben Sie als Merkmal des Namensnvarchar-Felds (30) nicht , Geburtstagstermin, E-Mail NVARCHAR (30), Position nvarchar (30), Abteilung Nvarchar (30)) an.
In der Tat kann der Name der Einschränkung nicht gefragt werden, in diesem Fall wird es in diesem Fall einen Systemnamen zugewiesen (wie "pk__employee__3214ec278da42077"):

Erstellen von Tabellenmitarbeitern (ID int nicht , Name nvarchar (30) nicht , Geburtstagstermin, E-Mail Nvarchar (30), Position Nvarchar (30), Abteilung Nvarchar (30), Primärschlüssel (ID))
Oder:

Erstellen von Tabellen-Mitarbeitern (ID INT INT NULL Primärschlüssel, Name Nvarchar (30) NICHT NULL, Geburtstagstermin, E-Mail Nvarchar (30), Position Nvarchar (30), Abteilung Nvarchar (30))
Ich würde jedoch für permanente Tische empfehlen, den Namen der Einschränkung immer eindeutig festzulegen, weil Nach dem explizit angegebenen und verständlichen Namen ist es einfacher, Manipulationen zu erfüllen, beispielsweise können Sie es löschen:

Alter Tabelle Mitarbeiter Drop Constraints PK_MEUNTOLEES
Eine solche kurze Syntax, ohne die Namen der Einschränkungen anzugeben, ist es praktisch, beim Erstellen temporärer Datenbanktabellen zu beantragen (der Name der Zeit Tabelle beginnt mit # oder ##), die nach der Verwendung gelöscht wird.

Geeignet

Im Moment haben wir die folgenden Befehle überprüft:
  • Tabelle erstellen Name_Table (Übertragung von Feldern und deren Typen, Einschränkungen) - dient zur Erstellung einer neuen Tabelle in der aktuellen Datenbank;
  • Tropfentisch Name_Table - Zum Löschen einer Tabelle aus der aktuellen Datenbank;
  • Ändern Sie Tabelle Name_table. ÄNDERN. Retribunity-Name ... - Zum Upgrade eines Spaltentyps oder zur Änderung seiner Einstellungen (z. B. zur Angabe der charakteristischen Null oder nicht null);
  • Ändern Sie Tabelle Name_table. Beschränkung hinzufügen Programmname PRIMÄRSCHLÜSSEL.(Field1, Field2, ...) - Fügen Sie den Primärschlüssel einem vorhandenen Tisch hinzu.
  • Ändern Sie Tabelle Name_table. Drop-Einschränkung. Primer-Name - Löschen einer Beschränkung des Tisches.

Ein wenig über temporäre Tische

Schneiden Sie von MSDN aus. In MS SQL Server gibt es zwei Arten von temporären Tabellen: lokal (#) und global (##). Lokale temporäre Tabellen sind nur für ihre Ersteller sichtbar, bis die Verbindungssitzung mit der SQL Server-Instanz abgeschlossen ist, sobald sie zuerst erstellt werden. Local Time-Tabellen werden automatisch gelöscht, nachdem Sie den Benutzer von der SQL Server-Instanz trennen. Globale temporäre Tabellen sind während der Erstellung dieser Tabellen für alle Benutzer sichtbar und werden gelöscht, wenn alle auf diese Tabellen genannten Benutzer von der SQL Server-Instanz getrennt werden.

Temporäre Tabellen werden in der TEMPDB-Systemstation erstellt, d. H. Wenn Sie sie erstellen, leisten wir nicht den Hauptbasis, der Rest der Zeittabellen sind vollständig mit den üblichen Tabellen identisch, sie können auch mit dem Drop-Table-Befehl gelöscht werden. Lokale (#) temporäre Tabellen werden häufiger verwendet.

Um eine temporäre Tabelle zu erstellen, können Sie den Befehl erstellen verwenden:

Tabelle erstellen #temp (ID int, Name nvarchar (30))
Da eine temporäre Tabelle in MS SQL einem regulären Tisch ähnelt, kann dies dementsprechend auch den Drop-Table-Befehl entfernen:

Tropfentisch #Temp.

Auch eine temporäre Tabelle (als regulärer Tabelle), können Sie die von der Anforderung mit der SELECT-Syntax ausgewählten Select-Syntax zurückgegebenen Daten erstellen und sofort erstellen und sofort ausfüllen.

Wählen Sie ID, Name in #Temp von Mitarbeitern aus

Auf eine Notiz
In verschiedenen DBMs kann die Implementierung von temporären Tabellen abweichen. Beispielsweise muss in der Oracle- und Firebird-DBMS die temporäre Tabellenstruktur im Voraus mit dem Befehl zum Erstellen des globalen temporären Tabellen erstellen definiert werden, der die Besonderheiten des Datenspeichers darin angibt, dann sieht der Benutzer es bereits unter den Haupttabellen und funktioniert damit als regulärer Tisch.

Normalisierung der Datenbank - Zerkleinerung auf Untertablungen (Verzeichnisse) und Definitionen von Krawatten

Unsere derzeitigen Mitarbeitertabelle hat einen Nachteil, dass der Benutzer in den Bereichen Positions- und Abteilungsfelder einen beliebigen Text eingeben kann, der zunächst mit Fehlern fördert, da ein Mitarbeiter die Abteilung einfach "it" und dem zweiten Mitarbeiter angeben kann. "IT-Abteilung" in der dritten "IT" einführen. Infolgedessen ist es unverständlich, den Benutzer zu verstehen, d. H. Sind die Daten von Mitarbeitern von Mitarbeitern einer Abteilung oder dem vom Benutzer beschriebenen Benutzern und sind es 3 verschiedene Abteilungen? Und sogar noch mehr, in diesem Fall können wir keine Daten für einen Bericht gruppieren, wobei er möglicherweise die Anzahl der Mitarbeiter im Kontext jeder Abteilung anzeigt.

Der zweite Nachteil liegt in der Menge der Speicherung dieser Informationen und deren Vervielfältigung, d. H. Für jeden Mitarbeiter wird der vollständige Name der Abteilung angegeben, der in der Speicherdatenbank für die Speicherung jedes Symbols aus dem Abteilungsnamen erforderlich ist.

Der dritte Nachteil ist die Komplexität der Aktualisierung dieser Felder, wenn der Name einiger Position beispielsweise geändert wird, zum Beispiel, wenn Sie den Position "Programmierer" auf dem "Junior-Programmierer" umbenennen müssen. In diesem Fall müssen wir Änderungen an jeder Zeile des Tisches vornehmen, die die Position dem "Programmierer" entspricht.

Um Datennachteile zu vermeiden und verwendet wird, wird die sogenannte Normalisierung der Datenbank in die Untertabellen, den Referenzbüchern, zerkleinert. Es ist nicht notwendig, die Theorie in der Abwehrung zu erklimmen, und studieren, dass die normalen Formen selbst repräsentieren, es reicht aus, um die Essenz der Normalisierung zu verstehen.

Lassen Sie uns 2 Tables Referenzbücher "Positionen" und "Abteilungen" erstellen, ich rufe zuerst die Positionen und die zweite Abteilungen an:

Erstellen von Tabellenpositionen (ID INT Intentity (1,1) Nicht Null-Constraints PK_POSITIONS Primärschlüssel, Name Nvarchar (30) nicht null) Tabellenabteilungen erstellen (ID INT Intity (1,1) NICHT NULL CONSTRAINT PK_DEPARTMENTS Primärschlüssel, Name Nvarchar (30 ) Nicht null)
Beachten Sie, dass wir hier die neue Identitätsoption verwendet haben, wodurch die Daten in der ID-Spalte automatisch nummeriert werden, in Schritt 1, d. H. Beim Hinzufügen neuer Datensätze werden sie konstant zugewiesene Werte 1, 2, 3 usw. Solche Felder werden normalerweise als Autoinomie bezeichnet. Die Tabelle kann nur ein Feld mit der Identitätseigenschaft definieren und normalerweise, aber optional ist ein solches Feld der Primärschlüssel für diese Tabelle.

Auf eine Notiz
In verschiedenen DBMS kann die Implementierung der Felder mit dem Messgerät auf eigene Weise erfolgen. In MySQL, zum Beispiel wird dieses Feld mit der Option Auto_increment ermittelt. In Oracle und Firebird wurde diese Funktionalität verwendet, um mit der Sequenz verwendet zu werden (Sequenz). Aber soweit ich das Oracle kenne, hat die generierte Identitätsoption jetzt hinzugefügt.

Lassen Sie uns diese Tabellen automatisch füllen, basierend auf den aktuellen Daten, die in der Position und der Abteilung der Departement der Mitarbeiter aufgenommen wurden:

Füllen Sie das Namensfeld der Positionstabelle aus, eindeutige Werte aus dem Positionsfeld der Positionen der Mitarbeiter Insert-Positionstabelle Wählen Sie von den Mitarbeitern eindeutige Position aus, in denen die Position nicht null ist - werfen Sie die Datensätze ab, die die Position nicht angegeben ist
Ich mache das gleiche für den Abteilungsabteilung:

Einfügen von Abteilungen (Name) Wählen Sie von den Mitarbeitern eindeutige Abteilung aus, in denen die Abteilung nicht null ist
Wenn wir jetzt die Positionen und Abteilungen öffnen, sehen wir eine nummerierte Set von Feldwerte-ID:

Wählen Sie * von Positionen aus

Wählen Sie * aus den Abteilungen aus

Tabellendaten spielen jetzt die Rolle von Referenzbüchern auf Task-Beiträge und Abteilungen. Jetzt beziehen wir uns auf Beiträge und Abteilungen. Erstellen Sie zunächst neue Felder in der Operationstabelle zum Speichern von Identifierdaten:

Fügen Sie ein Feld für ALTERTABLE-Mitarbeiter hinzu PositionID Int - Fügen Sie ein Feld für die Änderung der Änderung hinzu
Die Art der Referenzfelder sollte wie in Bezug auf Referenzbücher sein, in diesem Fall ist es int.

Fügen Sie auch zu der Tabelle auf einmal hinzu, sobald mehrere Felder mit einem Befehl zusammen sein können, die Felder durch das Komma aufgelistet:

ALTER TABLE-MITARBEITEN Fügen Sie PositionID Int, Department Int hinzu
Jetzt schreiben wir Referenzen (Referenzeinschränkungen - Fremdschlüssel) für diese Felder, damit der Benutzer nicht die Möglichkeit hat, in Felddaten zu schreiben, die Werte, die unter den Werten der ID-Werte in Bezug auf Referenzbücher fehlen .

ALTER TABLE-MITARBEITER Fügen Sie CONSTRAINT FK_TEMOUNTOWEES_POSITIONID FRANCE KEY (PositionID) Referenzen Positionen (ID)
Und mache das gleiche für das zweite Feld:

ALTER TABLE-MITARBEITER ABDECKUNG FB_MEOUSEES_DEPARTMENTID FRANCE-KEY (SPEACTIONID) Referenzen Abteilungen (ID)
Nun kann der Benutzer in diesen Feldern nur die Werte der ID aus dem entsprechenden Verzeichnis anwenden. Um eine neue Abteilung oder Position zu verwenden, ist es der erste, der einen neuen Eintrag in das entsprechende Verzeichnis hinzufügen. weil Beiträge und Abteilungen werden jetzt in einer einzigen Instanz in Bezug auf Referenzbücher gespeichert, um den Namen zu ändern, reicht es aus, es nur in dem Verzeichnis zu ändern.

Der Name des Referenzlimits ist in der Regel zusammengesetzt, es besteht aus dem Präfix "FK_", anschließend der Tabellenname wird angezeigt, und nach dem Unterstrich ist der Name des Felds, das sich auf die Verzeichnisplichtkennung bezieht.

Die Kennung (ID) ist in der Regel ein interner Wert, der nur für Verbindungen verwendet wird und welcher Wert dort gespeichert ist, in den meisten Fällen ist es absolut gleichgültig, sodass Sie nicht versuchen müssen, Löcher in der Reihenfolge von Zahlen zu beseitigen Im Zuge der Arbeit mit der Tabelle, beispielsweise nach dem Entfernen von Datensätzen aus dem Verzeichnis.

ALTER TABLE-TABLE ADD CONSTRAINT-NAME VEND-Taste (Feld1, Feld 2, ...) Referenzen Tabelle_spatch (Feld1, Feld 2, ...)
In diesem Fall wird der Primärschlüssel mit einer Kombination mehrerer Felder (Field1, Field2, ...) in der Tischplatte dargestellt.

Eigentlich aktualisieren Sie nun die PositionID- und Department-Werte der ID-Werte von Referenzbüchern. Wir verwenden den Update-Befehl zu diesem Zweck von DML:

Aktualisieren Sie E SET PositionID \u003d (Wählen Sie ID von Positionen aus, in der Name \u003d E.Position), Department \u003d (Wählen Sie ID von den Abteilungen aus, in denen Name \u003d E.Apartment) von den Mitarbeitern E
Mal sehen, was passiert ist, indem Sie der Anfrage folgen:

Wählen Sie * von den Mitarbeitern aus

Alle, die Felder von PositionID- und Abteilungs-Feldern sind mit angemessenen Positionskennungen und Abteilungen in den Feldern der Positions- und Abteilungsfelder in der Operationstabelle gefüllt. Nun können Sie diese Felder löschen:

ALTER TABLE-MITARBEITER DRÜCK SEND SENDEN, ABTEILUNG
Nun hat der Tisch das folgende Formular erworben:

Wählen Sie * von den Mitarbeitern aus

Ich würde Name. Geburtstag Email PositionId. AbteilungID.
1000 Ivanov I.i. NULL NULL 2 1
1001 Petrov p.p. NULL NULL 3 3
1002 Sidorov S.S. NULL NULL 1 2
1003 Andreev a.a. NULL NULL 4 3

Jene. Wir haben schließlich freigegeben, redundante Informationen zu lagern. Nun, gemäß der Anzahl der Positionen und der Abteilung können wir ihre Namen mit Werten in Bezug auf Referenztabellen eindeutig bestimmen:

Wählen Sie E.ID, E.NAME, P.NAME-Positionsname, D.Name-AbteilungName von den Mitarbeitern E LINKEN ANGABEN Abteilungen D auf d.id \u003d E.DepartmentId linker Join-Positionen P auf P.ID \u003d E.POSITIONID

Im Objektinspektor können wir alle für diese Tabelle erstellten Objekte sehen. Von hier aus können Sie verschiedene Manipulationen mit diesen Objekten erstellen - beispielsweise umbenennen oder Objekte löschen.

Es ist auch erwähnenswert, dass sich der Tisch auf sich selbst verweisen kann, d. H. Sie können einen rekursiven Link erstellen. Fügen Sie beispielsweise ein anderes MAILIDID-Feld an unseren Tisch mit Mitarbeitern hinzu, der einen Mitarbeiter anzeigt, der diesem Mitarbeiter unterworfen ist. Ein Feld erstellen:

ALTER TABELLE-MITARBEITEN Fügen Sie ManagerID INT hinzu
In diesem Bereich ist der Nullwert zulässig, das Feld ist leer, wenn beispielsweise keine höheren Mitarbeiter vorhanden sind.

Lassen Sie uns nun den Fremdschlüssel für die Mitarbeiter des Mitarbeiters erstellen:

ALTER TABLE MITARBEITER ABDECKE FK_EMPLOUNDES_MANAGERID-Auslandsschlüssel (ManagerID) Referenzen Mitarbeiter (ID)
Lassen Sie uns ein Diagramm erstellen und sehen, was die Verbindungen zwischen unseren Tischen aussehen, wie darauf aussehen:

Infolgedessen sollten wir das folgende Bild sehen (die Anopersentabelle ist mit den Tabellen der Positionen und der Intertationen verbunden, die sich auf sich selbst bezieht):

Schließlich lohnt es sich, dass Referenzschlüssel zusätzliche Optionen auf der Löschkaskade und auf Update-Cascade enthalten können, die darauf hindeuten, wie Sie sich bei der Löschung oder Aktualisierung des Eintrags, an den es Links im Tabellenverzeichnis gibt, verhalten. Wenn diese Optionen nicht angegeben sind, können wir die ID nicht in dem Tabellenverzeichnis in der Datensatz ändern, dass es Links von einer anderen Tabelle gibt, können wir keinen solchen Eintrag aus dem Verzeichnis löschen, bis Sie alle Leitungen löschen, die diese Verbindung dazu löschen Eintrag oder, wir aktualisieren den Link auf einen anderen Wert in diesen Zeilen.

Selection erneut mit der Tabelle mit der Option auf dem Löschen von Cascade für FK_MEUNTOEES_DEPartmentId:

Drop Table-Mitarbeiter erstellen Tischmitarbeiter (ID INT Null, Name Nvarchar (30), Geburtstagstermin, E-Mail Nvarchar (30), PositionId Int, Abteilungs-Int, ManagerID Int, Constraints PK_TEMOUNTES PRIMARY KEY (ID), CONSTRAINT FK_TEPREUNTES_DEPARTMENTID OFDRING FK_EPTEES_DEPARTMENTID OFDRING FK_EPTIONS_DEPARTIERTID ) Referenzen Abteilungen (ID) auf dem Löschen von Kaskaden, CONSTRAINT FK_TEPLAYES_POSITIONID-Fremdschlüssel (PositionID) Referenzen Positionen (ID), CONSTRAINT FK_EMPLAYERS_MANAGERID-Auslandsschlüssel (ManagerID) Referenzen Mitarbeitern (ID)) Einfügen von Mitarbeitern (ID, Name, Geburtstag, Position, PositionId, Department, ManagerID ) Werte (1000, n "Ivanov II", "19550219", 2.1, Null), (1001, n "Petrov PP", "19831203", 3,3,1003), (1002, n "Sidorov SS" , "19760607", 1,2,1000), (1003, n "Andreev AA", "19820417", 4,3,1000)
Löschen Sie eine Abteilung mit einem Kennung 3 von der Abteilungsabteilungstabelle:

Abteilungen löschen, in denen id \u003d 3
Schauen wir uns die Daten der Mitarbeiter an:

Wählen Sie * von den Mitarbeitern aus

Ich würde Name. Geburtstag Email PositionId. AbteilungID. ManagerID.
1000 Ivanov I.i. 1955-02-19 NULL 2 1 NULL
1002 Sidorov S.S. 1976-06-07 NULL 1 2 1000

Wie Sie sehen, richteten sich die Daten in der Abteilung 3 von der Anopers-Tabelle auch in den Ruhestand.

Option beim Update-Cascade verhält sich ebenfalls, aber wenn Sie den ID-Wert im Verzeichnis aktualisieren. Wenn Sie beispielsweise die Positions-ID in dem Posts-Verzeichnis ändern, wird in diesem Fall die Abteilungs-Tabelle in der Anopersentabelle auf den neuen ID-Wert aktualisiert, den wir im Verzeichnis gefragt haben. Aber in diesem Fall wird es einfach nicht demonstrieren, weil Die ID-Spalte in der Abteilungsabteilung ist die Identitätsoption, die uns nicht erlaubt, die folgende Abfrage auszuführen (Ändern der Department Identifier 3 bis 30):

Aktualisieren Sie die Abteilungen einstellen ID \u003d 30 WO ID \u003d 3
Die Hauptsache ist es, die Essenz dieser 2 Optionen auf der Löschkaskade und der Update-Kaskade zu verstehen. Ich wende diese Optionen sehr in seltenen Fällen an und empfehlen Sie, gut zu denken, bevor Sie sie im Referenzlimit angeben, weil Mit einer unbeabsichtigten Entfernung eines Datensatzes aus einer Referenztabelle kann dies zu großen Problemen führen und eine Kettenreaktion erzeugen.

Abteilung wieder erholen 3:

Wir geben die Berechtigung zum Hinzufügen / Ändern des Identity-Werts Set Identity_Insert-Abteilungen auf Insert-Abteilungen (ID, NAME) -Werte (3, N "IT") - Verbieten Hinzufügen / Ändern von IDENTITY SET Identity_Inser-Abteilungen aus
Reinigen Sie die Mitarbeitertabelle vollständig mit dem Befehl Truncate Table:

Tafel-Mitarbeiter abschneiden.
Und laden Sie die Daten erneut mit dem vorherigen Einfügungsbefehl an:

Einfügen von Mitarbeitern (ID, Name, Geburtstag, Geburtstag, PositionID, Sonder-, ManagerID) -Werte (1000, N "Ivanov I.I.", "19550219", 2,1, Null), (1001, n "Petrov PP", "19831203", 3 , 3.1003), (1002, n "Sidorov SS", "19760607", 1,2,1000), (1003, n "Andreev AA", "19820417" 4,3,1000)

Geeignet

In dem angegebenen Moment wurden unserem Wissen mehrere weitere DDL-Befehle hinzugefügt:
  • Wenn Sie das Identitätseigenschaft zum Feld hinzufügen, können Sie dieses Feld automatisch (Feld) für einen Tisch ausfüllen.
  • Ändern Sie Tabelle Name_table. Hinzufügen. list_pole_s_chards - Ermöglicht das Hinzufügen neuer Felder zum Tisch.
  • Ändern Sie Tabelle Name_table. Tropfensäule LIST_POLE - Ermöglicht das Entfernen von Feldern von der Tabelle.
  • Ändern Sie Tabelle Name_table. Beschränkung hinzufügen Programmname Unbekannter Schlüssel.(Felder) Verweise. Table_spatch (Felder) - Ermöglicht das Definieren der Verbindung zwischen Tabelle und dem Tabellenreferenzbuch.

Andere Einschränkungen - Einzigartig, Standard, Prüfen

Mit einer einzigartigen Einschränkung können Sie sagen, dass die Werte für jede Zeile in diesem Bereich oder im Feldeinsatz eindeutig sein sollten. Im Falle der Anopers-Tabelle können wir eine solche Einschränkung auf das E-Mail-Feld anwenden. Nur zuvor füllen E-Mail-Werte, wenn sie noch nicht definiert sind:

Mitarbeiter aktualisieren Set E-Mail \u003d " [E-Mail geschützt]"Wo id \u003d 1000 Update-Mitarbeiter Set E-Mail-Adresse \u003d" [E-Mail geschützt]"Wo id \u003d 1001 Update-Mitarbeiter eingestellt E-Mail \u003d" [E-Mail geschützt]"Wo id \u003d 1002 Update-Mitarbeiter Set E-Mails eingestellt \u003d" [E-Mail geschützt]"Wo id \u003d 1003
Und jetzt können Sie auf diesem Feld eine einzigartige Einschränkung auferlegen:

ALTER TABLE-MITARBEITER Fügen Sie CONSTRAINT UQ_TEMOUNTES_EMAIL eindeutig hinzu (E-Mail)
Nun kann der Benutzer nicht dieselbe E-Mail von mehreren Mitarbeitern erstellen.

Die Ein-Einschränkung der Einzigartigkeit wird normalerweise wie folgt bezeichnet - zunächst ist das Präfix "UQ_" zuerst, dann ist der Name des Tisches und nach dem Unterstrich der Name des Feldes, an das diese Einschränkung überlagert ist.

Wenn der Tabelle im Kontext einzigartig ist, muss es eine Kombination von Feldern geben, dann listen wir sie durch das Komma auf:

ALTER TABLE NAME_TABLE HINWEISE CONSTRAINT-NAME EINFAUER (FELD1, FELD 2, ...)
Mit dem Hinzufügen des Felds Standardmäßig können wir den Standardwert einstellen, der in dem Fall ersetzt wird, wenn er eingefügt wird neue Aufnahme Dieses Feld wird nicht in der Liste der Befehlsliste einfügen aufgeführt. Diese Einschränkung kann beim Erstellen einer Tabelle direkt eingestellt werden.

Fügen Sie der Mitarbeitertabelle ein neues Feld "Empfangsdatum" hinzu und rufen Sie ihn an und sagen Sie, dass der Standardwert dieses Felds das aktuelle Datum sein wird:

ALTER TABELLE MITARBEITER Fügen Sie das MAIDATE-Datum nicht NULL-Standard SysDateTime ()
Oder wenn die gemiedete Spalte bereits vorhanden ist, können Sie die folgende Syntax verwenden:

ALTER TABLE-MITARBEIFEN Fügen Sie Standard SysDatetime () für MAIDATE hinzu
Hier gab ich nicht den Namen der Einschränkung an, weil Bei Zahlungsverzug hatte ich die Meinung, dass es nicht so kritisch war. Wenn Sie jedoch auf einen guten Weg tun, dann denke ich, Sie müssen nicht faul sein und einen normalen Namen einstellen. Dies geschieht wie folgt:

ALTERTABLE-MITARBEIFEN Fügen Sie CONSTRAINT DF_MEOUSEES_HIDEDATE SYSDATETEE () FÜR MEADATE
Es war nicht so, dass diese Spalte vorher, dann, wenn es zu jedem Eintrag im MAIDATE-Feld hinzugefügt wird, der aktuelle Datumswert eingesetzt wird.

Wenn Sie einen neuen Eintrag hinzufügen, wird das aktuelle Datum auch nicht automatisch eingefügt, wenn wir es eindeutig nicht angeben, d. H. Geben Sie nicht in der Liste der Spalten an. Lassen Sie uns dies im Beispiel anzeigen, ohne das MAIDATE-Feld in der Liste der hinzugefügten Werte anzugeben:

Einfügen von Mitarbeitern (ID, Name, E-Mail) (1004, n "Sergeev S.S.", " [E-Mail geschützt]")
Lass uns nachsehen, was passiert ist:

Wählen Sie * von den Mitarbeitern aus

Ich würde Name. Geburtstag Email PositionId. AbteilungID. ManagerID. Anstellungsdatum.
1000 Ivanov I.i. 1955-02-19 [E-Mail geschützt] 2 1 NULL 2015-04-08
1001 Petrov p.p. 1983-12-03 [E-Mail geschützt] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [E-Mail geschützt] 1 2 1000 2015-04-08
1003 Andreev a.a. 1982-04-17 [E-Mail geschützt] 4 3 1000 2015-04-08
1004 Sergeev S.S. NULL [E-Mail geschützt] NULL NULL NULL 2015-04-08

Check Check-Limit wird verwendet, wenn die in das Feld eingefügten Werte überprüft werden müssen. Wir bieten beispielsweise diese Einschränkung auf dem Feld Tabel-Nummer, das wir über eine Mitarbeiterkennung (ID) haben. Mit dieser Einschränkung können wir sagen, dass die Tablettennummern von 1000 bis 1999 sein müssen:

ALTER TABLE-MITARBEITER ABDECKEN CONSTRAINT CK_MOUNTOWEES_ID-Check (ID zwischen 1000 und 1999)
Die Einschränkung wird normalerweise als das Präfix "CK_" bezeichnet, der zunächst, dann der Tabellenname und der Name des Feldes, an das diese Einschränkung auferlegt wird.

Versuchen wir, einen ungültigen Eintrag einzufügen, um zu überprüfen, ob die Einschränkungen funktioniert (wir müssen den entsprechenden Fehler erhalten):

Mitarbeiter (ID, E-Mail) -Werte (2000, " [E-Mail geschützt]")
Und jetzt wechsle ich den eingefügten Wert auf 1500 und stellen Sie sicher, dass der Eintrag eingefügt wird:

Mitarbeiter (ID, E-Mail) Werte (1500, " [E-Mail geschützt]")
Sie können auch einzigartige und Überprüfungsbeschränkungen erstellen, ohne den Namen anzugeben:

ALTER TABLE MITARBEITER Fügen Sie eindeutig (E-Mail) ALTER TABLE-Mitarbeiter hinzufügen Fügen Sie den Check hinzu (ID zwischen 1000 und 1999).
Dies ist jedoch keine gute Praxis, und es ist besser, den Namen der Restriktion explizit einzustellen, weil Um später zu sortieren, was schwieriger ist, müssen Sie das Objekt öffnen und sehen, was er antwortet.

Mit gutem Namen können viele Informationen zur Einschränkung direkt von seinem Namen gefunden werden.

Und dementsprechend können alle diese Einschränkungen sofort erstellt werden, wenn er einen Tisch erstellt, falls dies noch nicht der Fall ist. Löschen Sie den Tisch:

Drop Table-Mitarbeiter.
Und mit allen Einschränkungen, die von einer erstellten Tabelle erstellt wurden, erneut aufwerfen:

Erstellen von Tabellen-Mitarbeitern (ID INT NICHT NULL, NAME NVARCHAR (30), Geburtstagstermin, E-Mail Nvarchar (30), PositionId Int, Abteilungs-Int, MEADATE-Datum nicht NULL-Standard SysDatetime (), - Standardmäßig werde ich eine Ausnahme an die Einschränkung PK_MEUNTOLEES erstellen Primärschlüssel (ID), CONSTRAINT FK_TEPLAYEES_DEPARTMENTID-Fremdschlüssel (Department) Referenzen Abteilungen (ID), CONSTRAINT FK_EMPOUNTESES_POSITIONID-Fremdschlüssel (PositionID) Referenzen Positionen (ID), Einschränkung UQ_MOWERSEES_EMAIL EINZIGARTIGKEIT (E-Mail), CONSTRAINT CK_EMPLAYES_ID-Prüfung (ID zwischen 1000 und 1999))

Einfügen von Mitarbeitern (ID, Name, Birthday, E-Mail, PositionID, Department) Werte (1000, N "Ivanov I.I.", "19550219", " [E-Mail geschützt]", 2.1), (1001, n" Petrov PP "," 19831203 "," [E-Mail geschützt]", 3.3), (1002, n" Sidorov S.s. "," 19760607 "," [E-Mail geschützt]", 1,2), (1003, n" Andreev a.a. "," 19820417 "," [E-Mail geschützt]",4,3)

Ein wenig über die Indizes erstellten Indizes, die beim Erstellen von Beschränkungen Primärschlüssel und einzigartig sein

Wie Sie im oberhalb des Screenshots sehen können, werden bei der Erstellung der Einschränkungen des Primärschlüssels und eindeutige Indizes automatisch mit denselben Namen (PK_MEUNTOLEES und UQ_TEMOUNTES_EMAIL) erstellt. Standardmäßig wird der primäre Key-Index als gruppiert erstellt, und für alle anderen Indizes wie nichtclustered. Es lohnt sich, dass das Konzept eines Clusterindex nicht in allen DBMs ist. Die Tabelle kann nur einen Cluster-Index (Clustered) haben. Clustered - bedeutet, dass die Tabelleneinträge nach diesem Index sortiert werden, es kann auch gesagt werden, dass dieser Index direkten Zugriff auf alle Daten der Tabelle hat. Es ist so, den Hauptindex der Tabelle zu sprechen. Wenn Sie mehr unhöflich sagen, ist dies ein Index, der an den Tisch angeschraubt ist. Der Clusterindex ist ein sehr leistungsfähiges Werkzeug, das bei der Optimierung von Anforderungen helfen kann, während er sich einfach daran erinnert. Wenn wir sagen möchten, dass der Clusterindex nicht im Primärschlüssel verwendet wird, aber für einen anderen Index, aber beim Erstellen eines Primärschlüssels müssen wir die nichtclustergefaste angeben:

ALTER TABLE NAME_TABLE ADD CONSTRAINT Primärschlüssel Nichtclustered Primärname (Feld1, Feld 2, ...)
Beispielsweise werden wir den PK_MEOTESEES CONSTRAINT-Index herstellen, und der UQ_MEUNDOUNTEES_EMAIL-Limit-Index ist Cluster. Löschen Sie zunächst diese Einschränkungen:

ALTER TABLE MITARBEITER DROP CONSTRAINT PK_MOUNTOLEES ALTER TABELLE MITARBEITER DROP CONSTRAINT UQ_TEMOUNTES_EMAIL
Lassen Sie uns nun mit den Optionen mit Clustered und Nichtclustered erstellen:

ALTER TABLE-MITARBEIFEN ABDECKEN ABDRECHT PK_TEMOUNTES PRIMARY KEYS Nichtclustered (ID) ALTER TABLE MITARBEITER Fügen Sie CONSTRAINT UQ_TEPLOYEES_EMAIL eindeutig clustered (E-Mail)
Wenn Sie nun ein Beispiel aus der Operationstabelle auswählen, werden wir feststellen, dass die Datensätze nach dem Clustered UQ_TEMOUNTES_EMAIL-Index sortiert wurden:

Wählen Sie * von den Mitarbeitern aus

Ich würde Name. Geburtstag Email PositionId. AbteilungID. Anstellungsdatum.
1003 Andreev a.a. 1982-04-17 [E-Mail geschützt] 4 3 2015-04-08
1000 Ivanov I.i. 1955-02-19 [E-Mail geschützt] 2 1 2015-04-08
1001 Petrov p.p. 1983-12-03 [E-Mail geschützt] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [E-Mail geschützt] 1 2 2015-04-08

Wenn der Clusterindex der PK_EMPOYEEEES-Index war, wurden die Standardeinträge nach dem ID-Feld sortiert.

In diesem Fall ist es jedoch nur ein Beispiel, das die Essenz des Clustertindex zeigt, weil Höchstwahrscheinlich erfolgt die Anopersentabelle vom ID-Feld und in einigen Fällen fungiert sie möglicherweise als Verzeichnis.

Für Referenzbücher ist es normalerweise ratsam, dass der Clusterindex auf einem Primärschlüssel aufgebaut ist, da In Abfragen beziehen wir uns häufig auf das Zertifikat des Verzeichnisses, um beispielsweise die Namen (Beiträge, Abteilung) zu erhalten. Hier erinnere ich mich, was ich oben geschrieben habe, dass der Clusterindex direkten Zugriff auf die Reihen des Tisches hat, und folgt, dass wir den Wert einer beliebigen Spalte ohne zusätzlichen Overhead erhalten können.

Der Clusterindex ist von Vorteil, um auf die Felder anzuwenden, mit der die Probe am häufigsten ist.

Manchmal erstellen Sie in den Tabellen einen Schlüssel auf einem Ersatzfeld, in diesem Fall ist es nützlich, die Option "Clustered Index-Option für einen besseren Index zu speichern, und geben Sie bei der Erstellung eines Ersatz-Primärschlüssels die nichtclustered-Option an.

Geeignet

Zu diesem Zeitpunkt trafen wir uns mit allen Arten von Einschränkungen in ihrer einfacheren Form, die vom Team des Typs "ALTER TABLE_TABLE_TABLE_TABLE ADDABLE CONSTRAINT-NAME FÜGEN:": "
  • PRIMÄRSCHLÜSSEL. - Primärschlüssel;
  • Unbekannter Schlüssel. - Konfigurieren Sie die Links und Steuerung der Referenzintegrität von Daten;
  • Einzigartig - Ermöglicht das Erstellen von Einzigartigkeit;
  • Prüfen. - Ermöglicht die Richtigkeit der eingegebenen Daten;
  • Standard. - Ermöglicht das Einstellen des Standardwerts;
  • Es ist auch erwähnenswert, dass alle Einschränkungen mit dem Befehl gelöscht werden können. " Ändern Sie Tabelle Name_table. Drop-Einschränkung. Provinierungsname. "
Wir haben auch das Thema Indizes teilweise berührt und das Konzept des Clusters ( Gruppiert) und Noncluster ( Nichtclustered.) Index.

Erstellen unabhängiger Indizes.

Im Rahmen der Unabhängigkeit bezieht sich hier auf die Indizes, die nicht erstellt werden, um den Primärschlüssel oder einzigartig einzuschränken.

Indizes über das Feld oder Felder können durch den folgenden Befehl erstellt werden:

Erstellen Sie index idx_empoteses_name auf Mitarbeitern (Name)
Auch hier können Sie die Optionen angeben, die Clustered, Nichtclustered, einzigartig, sowie Sie können die Richtung für das Sortieren jedes einzelnen ASC-Felds (Standard) oder DESC angeben:

Erstellen Sie ein einzigartiger nichtclustered Index uq_empotes_emailDesc auf Mitarbeitern (E-Mail-DESC)
Beim Erstellen eines Nichtclust-Index kann die nichtclustergefaste Option freigegeben werden, da Es ist standardmäßig impliziert, hier wird angezeigt, dass sie einfach die Position der in dem Team gruppierten oder nichtgerollten Option angeben.

Der Index löschen kann wie folgt sein:

Drop-Index IDX_Employes_Name auf Mitarbeiter
Einfache Indizes sowie Einschränkungen können im Kontext des Befehls erstellen erstellt werden.

Entfernen Sie zum Beispiel den Tisch:

Drop Table-Mitarbeiter.
Und mit allen erstellten Einschränkungen und Indizes mit einem erstellten Tabellenbefehl neu aufwerfen:

Erstellen von Tabellen-Mitarbeitern (ID int nicht , Name Nvarchar (30), Geburtstagstermin, E-Mail Nvarchar (30), PositionID Int, Abteilungs-Int, MAIDATE DATUM NICHT NULL-CONSTRAINT DF_MEOUSEES_HIDATE STANDARD SYSDATETEY (), MANAGERIDID INT, CONSTRAINT PK_MEOUSEES Primärschlüssel (ID ), CONSTRAINT FK_TEMOUNTESE_DEPARTMENTID FRANCE-KEY (SONDINGID) Referenzen Abteilungen (ID), CONSTRAINT FK_Employes_positionID-Fremdschlüssel (PositionID) Referenzen Positionen (ID), CONSTRAINT FK_EMPLAYERS_MANAGERID-Fremdschlüssel (ManagerID) Referenzen Mitarbeitern (ID), CONSTRAINT UQ_MEOLEES_EMAIL SIGN (E-Mail), CONSTRAINT CK_MEUNTOWEES_ID Überprüfen Sie (ID zwischen 1000 und 1999), Index idx_empotagees_name (Name))
Schließlich in die Tabelle unserer Mitarbeiter einfügen:

Einfügen von Mitarbeitern (ID, Name, Birthday, Email, PositionID, Sonderdarning, ManagerID) -Werte (1000, N "Ivanov I.I.", "19550219", " [E-Mail geschützt]", 2.1, null), (1001, n" petrov pp "," 19831203 "," [E-Mail geschützt]", 3,3,1003), (1002, n" Sidorov S.s. "," 19760607 "," [E-Mail geschützt]", 1,2,1000), (1003, n" Andreev AA. "," 19820417 "," [E-Mail geschützt]",4,3,1000)
Darüber hinaus ist es erwähnenswert, dass Sie im Nicht-Cluster-Index Werte einschließen, indem Sie sie in einschließlich einschließen. Jene. In diesem Fall erinnert der Indexindex den Clusterindex, nur jetzt wird der Index nicht an der Tabelle angeschraubt, und die erforderlichen Werte werden mit dem Index verschraubt. Dementsprechend können solche Indizes die Leistung von Abfragen zur Auswahl (Auswählen) verbessern, wenn alle aufgelisteten Felder im Index verfügbar sind, dann ist es möglich, an der Tabelle überhaupt anzusprechen. Aber es erhöht natürlich die Größe des Index, weil Die Werte der aufgeführten Felder werden im Index dupliziert.

Schneiden Sie von MSDN aus. Allgemeine Syntax. Befehle zum Erstellen von Indizes

[Einzigartig] [Clustered | Nichtclustered] Index Index_Name on (Spalte [ASC | DESC] [, ... n]) [Include (column_name [, ... n]]]

Geeignet

Indizes können die Datenabtastrate (Auswählen) erhöhen, aber Indizes reduzieren die Geschwindigkeit der Tabellendatenmodifizierung, da Nach jeder Modifikation muss das System alle Indizes für eine bestimmte Tabelle neu aufbauen.

Es ist in jedem Fall ratsam, die optimale Lösung, die goldene Mitte, so zu finden, dass die Leistung der Abtastung und der Datenmodifikationen auf dem richtigen Niveau lag. Die Strategie zum Erstellen von Indizes und deren Menge kann von vielen Faktoren abhängen, beispielsweise, wie oft die Daten in der Tabelle geändert werden.

Schlussfolgerung von DDL.

Wie Sie sehen, ist die DDL-Sprache nicht so gefaltet, wie es auf den ersten Blick erscheint. Hier konnte ich fast alle grundlegenden Designs zeigen, die nur drei Tische betreiben.

Die Hauptsache ist, die Essenz und den Rest der Praxis zu verstehen.

Viel Glück für Sie, diese wunderbare Sprache namens SQL zu meistern.

Vom Autor: Hast du dich einen Wasserkocher angerufen? Nun, das ist das korrigierte Geschäft! Jedes Samovar war einst ein Wasserkocher! Oder war jeder Fachmann einst ein Samovar? Nein, wieder ist etwas falsch! Im Allgemeinen MySQL für Anfänger.

Warum MySQL-Teekannen?

Wenn Sie ernsthaft gesammelt haben, um Ihr Leben mit dem Internet zu verbinden, dann wird sofort in den ersten Schritten in der "Web" diese DBMS erfahren. MySQL kann von dem System des Datenbankverwaltungssystems "Alles Internet" fixieren. Ohne es wird keine mehr oder weniger ernsthafte Ressource berücksichtigt, es ist im Administratorplan jedes Hostings vorhanden. Und die meisten beliebten CMS und sogar "Selbstverteidigungsmotoren werden mit ihrer Teilnahme gebaut.

Im Allgemeinen können Sie ohne diese Plattform nicht tun. Aber zu studieren, wird es auch benötigt. der richtige Ansatz, Richtige Werkzeuge und das Hauptwunsch und Geduld. Ich hoffe die neuesten Komponenten, die Sie in Profis haben. Und seien Sie auf die Tatsache vorbereitet, dass Ihre Gehirne kochen, und Dampf aus dem Kopf gegossen, wie aus einem echten Wasserkocher

Aber so harte MySQL für Dummys wird nur gegeben, wenn Sie anfangen, dass es falsch ist. Wir werden keinen solchen Fehler machen und mit dieser Technologie mit den Grundlagen vertraut machen.

Grundlegendes Konzept

Zunächst werden wir die Hauptkonzepte weitergeben, die wir in dieser Publikation erwähnen werden:

Datenbank (Datenbank) ist die Hauptkomponente der Geräteinheit. Die Datenbank enthält Tabellen, die aus Spalten und Datensätzen bestehen (Zeilen). Die an der Kreuzung ausgebildeten Zellen enthalten strukturierte Daten eines bestimmten Typs.

DBMS (Datenbankverwaltungssystem) ist ein Satz aller Softwaremodule, um Datenbanken zu verwalten.

SQL - Sprache strukturierter Abfragen, mit denen der Entwickler "kommuniziert" mit dem Kern (Server) der DBMS. Wie jede Programmsprache verfügt SQL über eine eigene Syntax, ein Satz von Befehlen und Bedienern, unterstützte Datentypen.

Ich denke, um theoretisches Wissen zu beginnen, reichen wir aus. Die fehlenden Lücken in der Theorie, die wir "Farbe" üben. Nun bleibt es, das richtige Software-Tool zu wählen.

Auswahl des richtigen Werkzeugs

Häufig "Rauschen" in das gesamte Sortiment von MySQL-Muscheln für Anfänger, erkannte, dass es einfach nicht existiert. Alle Softwareprodukte für DBMS-Verwaltungen erfordern bereits installierter Server Datenbank Im Allgemeinen entschied ich mich, den "Roller" erneut zu erfinden, und ich entschied mich für das inländische Denwer-Paket. Sie können es auf der offiziellen Website herunterladen.

Seine Komposition enthält bereits alle Komponenten der DBMS, wodurch der Neuankömmling unmittelbar nach einer einfachen und verständlichen Installation ermöglicht, um eine praktische Bekanntschaft mit MySQL zu beginnen. Darüber hinaus enthält Denwer ein paar notwendigere Werkzeugentwickler: lokaler Server, PHP.

Die ersten Schritte.

Ich werde den Installationsvorgang des "Gentlemansky" -Set nicht beschreiben, weil alles automatisch geschieht. Nach dem Start der Installation werden nur die gewünschten Tasten zu drücken. Was ist nur in der MySQL-Variante für Dummys erforderlich?

Wenn der Installationsvorgang abgeschlossen ist, starten Sie den lokalen Server, warten Sie ein paar Sekunden. Nach diesem Typ in adresszeile Browser localhost.

Auf der Seite "Hurra, verdient!" Gehen Sie zu einem der im Snapshot angegebenen Links. Danach werden Sie auf PHPMYADMIN - die Shell, um Datenbanken zu verwalten.

Durch Klicken auf den Link http://downloads.mysql.com/docs/world.sql.zip herunterladen Sie ein Beispiel einer Testdatenbank von der offiziellen MySQL-Site herunter. Gehen Sie erneut auf PHPMYADMIN, im Hauptmenü oben gehen Sie zur Registerkarte "Import". Im Fenster "Importieren in das aktuelle" im ersten Abschnitt ("Importierte Datei"), setzen Sie den "Überblick über Ihren Computer".

Wählen Sie im Explorer-Fenster das Archiv mit dem heruntergeladenen Beispiel der Datenbank aus. Vergessen Sie nicht, an der Unterseite des Hauptfensters zu klicken, um auf "OK" klicken.

Ich empfehle, die angegebenen Parameterwerte nicht zu ändern. Dies kann zu einer falschen Anzeige der datenimportierten Quelle führen. Wenn das PHPMYADMIN-System einen Fehler erteilt hat, den er den Konicht erkennen kann, entpacken Sie ihn und wiederholen Sie den gesamten Importprozess zuerst.

Wenn alles gut gelaufen ist, erscheint die Programmnachricht oben, welche Importe erfolgreich sind, und links in der Datenbankliste - ein weiterer (word).

Betrachten Sie seine Struktur von innen, so dass Sie sich eindeutig vorstellen können, mit dem Sie umgehen können.

Klicken Sie auf den Namen der MySQL-Datenbank für Anfänger. Es zeigt eine Liste von Tabellen an, von denen er besteht. Klicken Sie auf einen von ihnen. Dann gehen Sie zum Artikel hauptmenü "Struktur". Der Hauptarbeitsbereich zeigt die Tabellenstruktur an: Die Namen aller Spalten, Datentypen und alle Attribute.

Eine Auswahl an Büchern, Videokursen und Online-Ressourcen, um Datenbanken, die Grundlagen der relationalen Theorie- und SQL-Sprache zu studieren.

Bücher

ALAN BEWLY "SQL SQL" (2007)

Dieses Buch ist eine ausgezeichnete Wahl für diejenigen, die zu Beginn des Territoriums-SQL-Studienpfads stehen. Es erlaubt Ihnen nicht nur, die notwendige Basis von Primärkenntnissen zu erwerben, sondern auch von den beliebtesten Feinheiten und leistungsstarken Sprachmitteln mitzuteilen, die die Programmierer verwenden.
Viele Anleitungen, die Datenbanken, relationale Theorie und SQL-Sprache gewidmet sind, werden einer langweiligen Präsentation überfüllt. theoretische Grundlagen. Dieses Buch ist dank seines leichten, lebenden Stils eine angenehme Ausnahme. Autor präsentiert meisterhaft die Leserinformationen über SQL-Ausdrücke und -blöcke, Arten von Bedingungen, Join-AH, Unterabfragen und vielen anderen Dingen.
Um das in der Praxis gewonnene Wissen zu sichern, erstellt der Autor eine MySQL-Trainingsbasis und gibt viele praktische Beispiele für Anfragen, die das gesamte theoretische Material abdecken.

Chris FIALLLYL "SQL" (2013)


Das Buch spricht über die Version der Ansi-SQL-92-Sprache (SQL2). Es wird ausführlich beschrieben, wie Sie die Abfragesprache anwenden, um die entsprechenden Klassen von Aufgaben in der Abtastung und Änderung von Daten zu lösen und mit den Datenbankstrukturobjekten zu arbeiten. Alle Beispiele werden ausführlich erläutert.
Besonderes Augenmerk wird an die Unterschiede in SQL-Dialekten in der Implementierung der häufigsten DBMS: MySQL, Oracle, MS SQL Server und Postgrecesql gelegt.
Das Buch sei allen, die alle unabhängig voneinander SQL-Sprache lernen oder ihr Wissen zu diesem Thema verbessern möchten.

Anthony Molinaro "SQL. Sammlung Rezepte "(2009)


Diese Publikation ist für diejenigen gedacht, die bereits etwas Wissen über SQL haben und ihre Fähigkeiten in diesem Bereich verbessern möchten. Es ist auch sehr nützlich und Experten auf dem Gebiet der Datenbanken, da der Autor Beispiele für die Lösung von Aufgaben in verschiedenen DBMS bietet: DB2, Oracle, PostgreSQL, MySQL und SQL Server.
Das Buch hilft Ihnen, zu lernen, wie Sie SQL verwenden, um ein breiteres Spektrum von Aufgaben zu lösen: von Operationen in der Datenbank bis zur Daten und übertragen Sie sie über das Netzwerk in der Anwendung.
Sie erfahren, wie Sie Fensterfunktionen und spezielle Betreiber anwenden, sowie fortgeschrittene Methoden zur Arbeit mit Data Warehouses: Erstellen von Histogrammen, Datenausrichtung in Blöcken, die die Aggregation des Gleitbereichs der Werte durchführen, wodurch aktuelle Summen und Arme bildet. Sie können Zeichenfolgen an Spalten und umgekehrt bereitstellen, die Berechnungen in der Zeile vereinfachen und eine doppelte Bereitstellung des resultierenden Satzes durchführen, einen Zeilenbypass ausführen, mit dem Sie SQL-Syntaxzeichenfolge, Wörter, Wörter oder Elemente einer Zeichenfolge verwenden können Separatoren. Die vom Autor angebotenen Techniken optimieren den Code Ihrer Anwendungen und öffnen die neuen SQL-Sprachfunktionen vor Ihnen.

Alex Kriegel und andere. "SQL. Benutzerbibel »2nd Ausgabe (2010)


Das Buch ist einzigartig, da jedes Kapitel einen Vergleich der Implementierung bestimmter Anforderungen an Dialekte von drei führenden DBMs bietet. Daher ist es ein umfassendes und praktisches Referenzbuch für SQL-Sprache für Entwickler aus Neulingen von Newbies nach Guru, einer Art Desktop-Handbuch.
Die Publikation deckt Themen aus den Grundlagen auf Transaktionen und Schlösser, Funktionen und Datenbankschutzwerkzeugen ab.
Das Ende präsentiert mehrere zusätzliche Themen: SQL-Integration in XML, OLAP Business Analytics und vieles mehr.

Eric Redmond, Jim R. Wilson "Sieben Datenbanken für sieben Wochen. Einführung in moderne Datenbanken und Nosql-Ideologie "(2015)

Das Buch beschreibt die meisten modernen Open Source-Datenbanken: Redis, Neo4J, Couchdb, Mongodb, HBase, PostgreSQL und RIAK. Jede Datenbank enthält Beispiele für die Arbeit mit echten Daten, die die wichtigsten Ideen und Stärken demonstrieren.
Dieses Buch tauscht Licht auf die Stärken und Schwächen jeder der sieben Datenbanken und lernt Sie, denjenigen zu wählen, der den Anforderungen am besten erfüllt.

Die meisten modernen Webanwendungen interagieren in der Regel mit Datenbanken mit einer Sprache mit dem NamenSQL. Zum Glück für uns ist diese Sprache sehr leicht zu lernen. In diesem Artikel werden wir uns einfach ansehenSQL. anfragen und lernen Sie, wie Sie sie für die Interaktion mit verwendenMySQL-Datenbank.

Was brauchen Sie?

SQL (strukturierte Abfragesprache) sprache, die speziell entwickelt wurde, um mit Datenbankverwaltungssystemen zu interagieren, wie zMySQL, Oracle, SQLite und andere ... zu erfüllenSQL. anfragen in diesem Artikel beraten Sie Sie zur InstallationMysql. auf der lokaler Computer. Ich empfehle auch die Verwendung phpmyadmin. als visuelle Schnittstelle.

All dies ist in all dem Lieblings-Denver verfügbar. Ich denke, jeder sollte wissen, was es ist und wo man es mitnehmen soll :). Könneneine andere Verwendung von Wamp oder Mamp.

In Denver gibt es ein integriertesMysql. Konsole. Wir werden es verwenden.

Datenbank erstellen:datenbankerstellung.

Hier ist unsere erste Anfrage. Wir erstellen unsere erste Datenbank für weitere Arbeiten.

Zu beginnen, entdeckenMysql. konsole und Anmelden. ZumWamp. das Standardkennwort ist leer. Das ist nichts :). ZumMAMP - "Wurzel". Für Denver muss geklärt werden.

Geben Sie nach dem Anmelden die folgende Zeile ein und klicken Sie aufEINGEBEN:

Erstellen Sie die Datenbank my_first_db;

Beachten Sie, dass das Semikolon (;) am Ende der Anforderung sowie in anderen Sprachen hinzugefügt wird.

Befehle auch in SQL empfindlich für das Register. Wir schreiben sie in große Buchstaben.

OPTI. nur: Zeichensatz.und Kollation

Wenn Sie installieren möchtenzeichensatz (Symbole) und Collation (Vergleich) können schreiben Sie den folgenden Befehl:

Datenbank erstellen my_first_db Standard-Zeichensatz-Set UTF8-Collate utf8_general_ci;

Es gibt eine Liste von Zeichensätzen, die in unterstützt werden MySQL.

Datenbanken anzeigen:zeigt eine Liste aller Datenbanken an

Dieser Befehl wird verwendet, um alle verfügbaren Datenbanken auszugeben.

Drop-Datenbank:entfernung der Datenbank.

Sie können eine vorhandene Datenbank mit dieser Anfrage löschen.

Seien Sie vorsichtig mit diesem Befehl, da es ohne Warnung ausgeführt wird. Wenn Ihre Datenbank Daten enthält, werden sie entfernt.

Benutzen:Wahl der Datenbank

Technisch ist dies keine Anfrage, sondern ein Bediener und es erfordert keinen Punkt mit einem Komma am Ende.

Er berichtet mysql. wählen Sie die Standarddatenbank für die aktuelle Sitzung aus. Jetzt sind wir bereit, Tabellen zu erstellen und andere Dinge mit der Datenbank herzustellen.

Was ist der Tisch in der Datenbank?

Sie können eine Tabelle in der Datenbank in dem Formular einreichenExcel-Datei.

Wie auf dem Bild haben die Tabellen Spaltennamen, Reihen und Informationen. Mit der HilfeSQL. anfragen Wir können solche Tabellen erstellen. Wir können auch Hinzufügen, Lesen, Updates hinzufügen und Informationen löschen.

TABELLE ERSTELLEN: Einen Tisch erstellen

C. die Hilfe dieser Anfrage können wir Tabellen in der Datenbank erstellen. Leider DokumentationMysql. nicht sehr klar für Anfänger in diesem Problem. Die Struktur dieser Art von Anfragen kann sehr kompliziert sein, aber wir beginnen mit einfach.

Die folgende Abfrage erstellt eine Tabelle mit 2 Lautsprechern.

Erstellen von Tabellenbenutzern (Benutzername VARCHAR (20), CREATE_DATE Datum);

Bitte beachten Sie, dass wir unsere Anfragen in mehrere Zeilen und mit Registerkarten für Unterbrechungen schreiben können.

Die erste Zeichenfolge ist einfach. Wir erstellen einfach eine Tabelle mit dem Namen "Benutzer". Neben in Klammern, durch ein Komma, gibt es eine Liste aller Spalten. Nach jedem Namen der Spalte haben wir Informationstypen wie VARCHAR oder Datum.

VARCHAR (20) bedeutet, dass die Spalte einen String-Typ aufweist und maximal 20 Zeichen lang sein kann. Datum ist auch eine Art von Informationen, die zur Lagerung von Terminen in einem solchen Format verwendet werden: "GGYG - MM-DD".

PRIMÄRSCHLÜSSEL ( primärschlüsselh)

Bevor wir die folgende Abfrage erfüllen, müssen wir auch eine Spalte für "user_id" enthalten, die unser Primärschlüssel ist. Sie können den Primärschlüssel als Informationen wahrnehmen, die zur Identifizierung jeder Zeile des Tisches verwendet werden.

Erstellen von Tabellenbenutzern (user_id int auto_increment Primärschlüssel, Benutzername varchar (20), Create_date Datum);

Int. macht einen 32-Bit-Integertyp (zum Beispiel Zahlen). Auto_increment. erzeugt automatisch einen neuen WertIch würde jedes Mal, wenn wir neue Informationen hinzufügen. Das ist nicht unbedingt, aber macht der gesamte Prozess leichter.

Diese Spalte ist nicht obligatorisch, um einen ganzen Wert zu sein, der jedoch am häufigsten verwendet wird. Das Vorhandensein des Primärschlüssels ist auch nicht obligatorisch, es wird jedoch für die Architektur und die Leistung der Datenbank empfohlen.

Lassen Sie uns eine Anfrage ausführen:

Tische anzeigen:alle Tische anzeigen.

Mit dieser Anfrage können Sie eine Liste von Tabellen erhalten, die sich in der Datenbank befinden.

Erklären:Tischstruktur anzeigen.

Um die Struktur der vorhandenen Tabelle anzuzeigen, können Sie diese Abfrage verwenden.

Spalten werden mit allen Eigenschaften angezeigt.

Tropfentisch:tabelle löschen

Sowie Drop-Datenbanken, diese Anfrage löscht den Tisch und den Inhalt ohne Warnung.

ALTER TABELLE: tisch wechseln

Diese Anfrage kann aufgrund einer größeren Anzahl von Änderungen auch eine komplexe Struktur enthalten, die sie mit der Tabelle mithalten kann. Schauen wir uns die Beispiele an.

(Wenn Sie den letzten Schritt der Tabelle löschen, erstellen Sie es erneut für Tests.)

Hinzufügen einer Spalte

ALTER-Tabellenbenutzer addieren E-Mail-Varchar (100) nach Benutzername;

Dank der guten Lesbarkeit von SQL, denke ich, dass es keinen Sinn macht, es im Detail zu erklären. Wir fügen hinzu neue Spalte "E-Mail" nach "Benutzername".

Lautsprecher löschen

Es war auch sehr einfach. Verwenden Sie diese Anfrage mit Vorsicht, da Sie Daten ohne Warnung löschen können.

Stellen Sie nur eine Remote-Säule für weitere Experimente wieder her.

Änderungen an der Spalte vornehmen

Manchmal möchten Sie möglicherweise Änderungen an den Spalteneigenschaften vornehmen, und Sie müssen es dafür nicht vollständig löschen.

Diese Anfrage wurde in "User_name" in "username" umbenannt und seinen Typ mit VARCHAR (20) auf VARCHAR (30) geändert. Eine solche Änderung sollte die Daten in der Tabelle nicht ändern.

EINFÜGEN: Hinzufügen von Informationen zum Tisch

Fügen Sie der Tabelle mit der folgenden Anforderung ein paar Informationen hinzu.

Wie Sie sehen, enthält Werte () eine Liste von Werten, die durch Kommas getrennt sind. Alle Werte sind in einzelnen Säulen beigefügt. Und die Werte müssen in der Reihenfolge der Spalten liegen, die beim Erstellen einer Tabelle definiert wurden.

Beachten Sie, dass der erste Nullwert für das primäre Schlüsselfeld "user_id" bezeichnet wird. Wir tun dies, damit die ID automatisch generiert werden soll, da die Spalte über eine Auto_incrent-Eigenschaft verfügt. Wenn die Informationen zum ersten Mal hinzugefügt werden, ist die ID 1. Nächster Reichweite - 2 usw.

ALTERNATIVE MÖGLICHKEIT

Es gibt eine andere Abfrageoption, um eine Serie hinzuzufügen.

Diesmal verwenden wir das Set-Schlüsselwort anstelle von Werten, und es hat keine Halterungen. Es gibt mehrere Nuancen:

Die Spalte kann übersprungen werden. Zum Beispiel haben wir keinen Wert für den "User_ID" zugewiesen, der standardmäßig Ihren Auto_-In-Wert empfängt. Wenn Sie die Spalte mit dem VARCHAR-Typ überspringen, wird die leere Zeichenfolge hinzugefügt.

Jede Spalte muss nach Namen angewendet werden. Daher können sie in keiner Reihenfolge erwähnt werden, im Gegensatz zur vergangenen Version.

Alternative Version 2.

Hier ist eine andere Option.

Da es erneut Verweise auf den Spaltennamen gibt, können Sie die Werte in beliebiger Reihenfolge einstellen.

Last_insert_id ()

Sie können diese Abfrage verwenden, um die ID zu erhalten, die automatisch_increment für die letzte Zeile der aktuellen Sitzung war.

Jetzt ()

Jetzt ist es an der Zeit, zu zeigen, wie Sie die MySQL-Funktion in Abfragen verwenden können.

Die Taste () () zeigt das aktuelle Datum an. Sie können damit das Datum der Spalte automatisch auf das Einfügen der neuen Zeile auf den Strom einstellen.

Beachten Sie, dass wir 1 WARNUNG erhalten haben, aber nicht darauf achten. Der Grund dafür ist, dass () auch () auch dazu dient, temporäre Informationen auszugeben.

Wählen: Daten aus der Tabelle lesen

Wenn wir Informationen zum Tisch hinzufügen, ist es logisch, es von dort zu lernen, dass es gelesen wird. Dies ist dabei, dass die Auswahlanfrage uns helfen wird.

Nachfolgend finden Sie die einfachste Auswahlanforderung, um den Tisch zu lesen.

In diesem Fall bedeutet das Asterisk (*), dass wir alle Felder von der Tabelle angefordert haben. Wenn Sie nur bestimmte Lautsprecher wünschen, sieht die Anfrage so aus.

BedingungWo

Am häufigsten interessieren wir uns nicht für alle Säulen, sondern nur in einigen. Nehmen wir beispielsweise an, dass wir nur eine E-Mail-Adresse für den Benutzer "Nettuts" benötigen.

Dabei können Sie die Bedingungen in der Abfrage einstellen und detaillierte Proben erstellen.

Beachten Sie, dass ein Zeichen für die Gleichheit verwendet wird, gleich (\u003d) und nicht zwei, wie bei der Programmierung.

Sie können auch Vergleiche verwenden.

Und oder oder kann verwendet werden, um Bedingungen zu kombinieren:

Beachten Sie, dass zahlenwerte sollte nicht in Zitaten sein.

Im ()

Dies ist nützlich für die Probenahme für mehrere Werte.

Mögen

Ermöglicht es Ihnen, "Wildcard-Anfragen zu tun

Das% -Symbol wird als "Platzhalter" verwendet. Das heißt, an seiner Stelle kann es alles geben.

BedingungSortieren nach.

Wenn Sie das Ergebnis in einem bestellten Formular von einem Kriterium erhalten möchten

Der Standard-ASC (mehr als mehr). Für umgekehrte verwendet es DESC.

Beschränken ... Offset ...

Sie können die Anzahl der erhaltenen Ergebnisse einschränken.

Limit 2 dauert nur die ersten ersten Ergebnisse. Limit 1 Offset 2 erhält 1 Ergebnis nach dem ersten 2. 2. Limit 2, 1 bedeutet dasselbe (zahlen Sie nur zuerst, dass er ausgleichen und dann ist).

Aktualisieren: Änderungen an Informationen in der Tabelle vornehmen

Diese Abfrage wird verwendet, um die Informationen in der Tabelle zu ändern.

In den meisten Fällen wird es mit dem WHER-Zustand verwendet, da Sie höchstwahrscheinlich Änderungen an bestimmten Spalten vornehmen möchten. Wenn keine Änderungsbedingungen vorhanden sind, wirken sich Änderungen auf alle Reihen aus.

Sie können auch ein Limit verwenden, um die Anzahl der Zeilen einzuschränken, in denen Sie Änderungen vornehmen möchten.

Löschen: Informationen aus dem Tisch entfernen

Neben dem Update wird diese Abfrage mit wo verwendet:

Um den Inhalt des Tisches zu löschen, können Sie dies einfach tun:

Von Benutzern löschen;

Aber es ist besser zu benutzenKürzen.

Neben dem Deletion setzt diese Anfrage auch zurück Auto_increment. und wenn Sie wieder Zeilen hinzufügen, beginnt der Zähler von Grund auf.Löschen. dies tut nicht und das Zählen geht weiter.

Deaktivieren Sie Kleinbuchstaben und spezielle Wörter

Linienwerte

Einige Zeichen müssen getrennt werden (flucht. ), Oder vielleicht kann es Probleme geben.

Verwenden Sie dazu den hinteren Schrägstrich(\).

Spezielle Wörter

Da in MySQL. es gibt viele besondere Wörter (Auswählen oder aktualisieren. ) Um Fehler bei der Verwendung zu vermeiden, müssen Sie Angebote verwenden. Aber keine gewöhnlichen Zitate, sondern(`).

Das heißt, Sie müssen eine Spalte namens hinzufügen "löschen. ", Muss es so gemacht werden:

Fazit

Vielen Dank, dass Sie bis zum Ende lesen. Ich hoffe, dieser Artikel war nützlich. Das ist nicht das Ende! Fortgesetzt werden:).

Strukturierte Abfragesprache (strukturierte Abfragesprache) oder SQL- Dies ist eine deklarative Programmiersprache für den Einsatz in quasi-relationalen Datenbanken. Viele der ursprünglichen SQL-Merkmale wurden zum Versenden von Kalkül aufgenommen, aber die neuesten SQL-Erweiterungen umfassen immer mehr relationaler Algebra.
SQL wurde ursprünglich von IBM erstellt, aber viele Hersteller entwickelten ihre eigenen Dialekte. Es wurde 1987 vom amerikanischen National Institute of Normen (ANSI) und ISO als Standard angenommen, 1987. Im SQL-Programmiersprache Standard erklärte Ansi, dass die offizielle SQL-Aussprache "Es Kew El" ist. Viele Datenbankspezialisten verwendeten jedoch die Aussprache "Slang" "SIKVEL", die den ersten Namen der Sprache widerspiegelt, die später aufgrund des Konflikts von Marken und Gegenständen von IBM geändert wurde. Programmierung für Anfänger.
SQL-Programmiersprache. Wurde 1992 überarbeitet, und diese Version ist als SQL-92 V bekannt. Dann wurde es erneut überarbeitet, 1999, um SQL: 1999 (AKA SQL3) zu werden. Programmierung für Dummys. SQL 1999 unterstützt Objekte, die bisher nicht in anderen Versionen unterstützt werden, sondern nur Ende 2001 unterstützte nur mehrere Datenbankverwaltungssysteme SQL-Implementierung: 1999.
SQL, obwohl es als ANSI und ISO definiert ist, hat viele Variationen und Erweiterungen, von denen die meisten ihre eigenen Merkmale haben, wie beispielsweise die Implementierung der Oracle PL / SQL Corporation oder die Implementierung von Sybase und Microsoft mit dem Namen "Transact-SQL", das kann eine stärkere mit Programmierung von Programmieren verwirren. Es ist auch nicht ungewöhnlich für kommerzielle Implementierungen, um die Unterstützung der Hauptmerkmale des Standards zu senken, solche Datentypen als Datum und Uhrzeit, die eine Art ihrer eigenen Option bevorzugen. Dadurch können im Gegensatz zu ANSI-C- oder ANSI-Fortranen, die normalerweise ohne ernsthafte strukturelle Änderungen von der Plattformplattform portiert sind, die SQL-Programmiersprache-Anfragen selten zwischen verschiedenen Datenbanksystemen ohne wesentliche Modifikationen übertragen werden. Die meisten Menschen in den Datenbanken berücksichtigen, dass dieser Mangel an Kompatibilität absichtlich ist, um jedem Entwickler ein eigenes Daten-Datenbankverwaltungssystem bereitzustellen und den Käufer in eine bestimmte Datenbank zu verknüpfen.
Wie der Name folgt, ist die SQL-Programmiersprache für spezifische, begrenzte Ziele für Datenabfragen ausgelegt, die in der relationalen Datenbank enthalten sind. Als solche handelt es sich um ein Satz von Programmiersprache, um Datenproben zu erstellen, keine Verfahrenssprache, beispielsweise C oder BASIC, die zur Lösung eines viel größeren Problems entwickelt werden sollen. Spracherweiterungen wie PL / SQL sind so konzipiert, dass sie diese Begrenzung lösen, indem er beim Speichern von SQL-Vorteilen Prozeduremente für SQL hinzufügt. Ein weiterer Ansatz ist, dass die SQL eine Process-Sprache-Programmierbefehle einbetten dürfen und mit der Datenbank interagieren kann. Beispielsweise unterstützen Oracle und andere Java-Sprache in der Datenbank, während PostgreSQL Funktionen auf Perl, TCL oder C schreiben können.
Ein Witz über SQL: "SQL ist weder strukturiert noch die Sprache." Die Essenz des Witzes ist, dass SQL keine Zunge der Turgebung ist. .

Wählen Sie * von t
C1. C2.
1 eIN.
2 b.
C1. C2.
1 eIN.
2 b.
Wählen Sie C1 aus t
C1.
1
2
C1. C2.
1 eIN.
2 b.
Wählen Sie * aus t, wo C1 \u003d 1 ist
C1. C2.
1 eIN.

Angesichts der T-Tabelle zeigt die Anforderung SELECT * aus T an, alle Elemente aller Elemente aller Reihen des Tisches.
Von derselben Tabelle zeigt die SELECT C1 aus T-Anforderung Elemente aus der C1-Spalte aller Reihen der Tabelle.
Von derselben Tabelle zeigt die SELECT * aus T, wo C1 \u003d 1-Abfrage alle Elemente aller Zeilen anzeigt, in denen der Wert der C1-Säule "1" ist.

SQL-Schlüsselwörter.

SQL-Wörter sind in eine Reihe von Gruppen unterteilt.

Das erste ist Datenmanipulationssprache oder DML (Datenverwaltungssprache). DML ist eine Teilmenge der Sprache, die zur Anforderung von Datenbanken verwendet wird, die Daten hinzufügen, aktualisieren und löschen.

  • Select ist einer der am häufigsten verwendeten DML-Befehle und ermöglicht es dem Benutzer, eine Anforderung als Beschreibung des gewünschten Ergebnisses in Form eines Sets zu stellen. In der Aposition wird nicht angezeigt, wie sich die Ergebnisse befinden müssen - die Anforderung nach einer Form von Form, die in der Datenbank ausgeführt werden kann, ist der Betrieb des Datenbanksystems, insbesondere der Optimierer wird angefordert.
  • Insert wird verwendet, um Zeichenfolgen (formelles Zifferblatt) für die vorhandene Tabelle hinzuzufügen.
  • Aktualisierung wird verwendet, um die Datenwerte in der vorhandenen String der Tabelle zu ändern.
  • Definition von vorhandenen Zeilen, die aus der Tabelle gelöscht werden.

Drei andere schlüsselwörtera, wir können sagen, dass sie in die Gruppe dml fallen:

  • Beginnen Sie mit der Arbeit (oder starten Sie die Transaktion, abhängig vom SQL-Dialekt) kann verwendet werden, um den Start der Datenbanktransaktion zu markieren, die überhaupt nicht vollständig erfüllt ist.
  • Commit legt fest, dass alle Datenänderungen nach dem Ausführen von Vorgängen gespeichert werden.
  • Rollback bestimmt, dass alle Datenänderungen nach der letzten Fixierung oder Rollback zerstört werden müssen, bis der in der Datenbank aufgenommene Moment als "Rollback" aufgenommen wurde.

Commit und Rollback werden in Bereichen wie Transaktionskontrolle und Blockierung verwendet. Beide Anweisungen ergänzen alle aktuellen Transaktionen (Datenbankoperationen) und entfernen alle Schlösser, um die Daten in den Tabellen zu ändern. Das Vorhandensein oder Fehlen einer Beginn der Arbeit oder einer ähnlichen Anwendung hängt von der spezifischen SQL-Implementierung ab.

Die zweite Gruppe von Keywords gehört zur Gruppe Datendefinitionssprache oder DDL (Datendefinitionssprache). Ddl Ermöglicht dem Benutzer, neue Tabellen und zugehörige Elemente zu definieren. Die meisten kommerziellen Basen sQL-Daten haben ihre eigenen Erweiterungen in DDL, die die Kontrolle über nicht standardmäßige, aber normalerweise wichtige Elemente eines bestimmten Systems ermöglichen.
Die wichtigsten DDL-Elemente sind Befehle, um zu erstellen und zu löschen.

  • Erstellen Sie Definitionen Objekte (z. B. Tabellen), die in der Datenbank erstellt werden.
  • Tropfen bestimmt, welche vorhandenen Objekte in der Datenbank in der Regel unwiederbringlich entfernt werden.
  • Einige Datenbanksysteme unterstützen auch Ändern.Damit kann der Benutzer das vorhandene Objekt auf unterschiedliche Weise ändern - Sie können beispielsweise Spalten zu einer vorhandenen Tabelle hinzufügen.

Die dritte Gruppe von SQL-Schlüsselwörtern ist Datensteuerungssprache oder DCL (Datensteuerungssprache). DCL Verantwortlich für Datenzugriffsrechte und ermöglicht dem Benutzer, den Zugriff auf Zugriff auf Ansicht oder Bearbeiten von Daten in der Datenbank zu überwachen. Hier sind zwei Hauptschlüsselwörter:

  • Grant - Ermöglicht dem Benutzer, Vorgänge auszuführen
  • Revoke - Löscht oder schränkt die Möglichkeit ein, den Betrieb des Benutzers auszuführen.

Datenbanksysteme mit SQL

  • Interbase.
  • Mysql.
  • Orakel
  • PostgreSQL.
  • SQL Server

Wie werde ich ein professioneller Entwicklungsfachmann und fangen Sie an, Geld zu verdienen? Günstige Videokurse mit Informationseinführung.

Fortsetzung des Themas:
W-lan

Zu wissen, warum das Telefon erhitzt wird, kann der Benutzer versuchen, seine Temperatur zu reduzieren. Dies wird dazu beitragen, eines der häufigsten Probleme zu lösen - obwohl er damit konfrontiert ist ...