MySQL häufig verwendete SQL und Befehle vom Eintrag bis zum Löschen der Datenbank und zum Weglaufen

MySQL häufig verwendete SQL und Befehle vom Eintrag bis zum Löschen der Datenbank und zum Weglaufen

Starten und Stoppen

Starten Sie den MySQL-Dienst

sudo /usr/local/mysql/support-files/mysql.server starten

MySQL-Dienst stoppen

sudo /usr/local/mysql/support-files/mysql.server stoppen

Starten Sie den MySQL-Dienst neu

sudo /usr/local/mysql/support-files/mysql.server neu starten

Geben Sie die MySQL-Verzeichnisdatei ein

cd /usr/local/mysql/support-files

Geben Sie die MySQL-Befehlszeile ein

/usr/local/MySQL/bin/mysql -uroot -p12345678

Datenbank verlassen

Ausfahrt;

Datenbankbezogene Vorgänge

Alle Datenbanken abfragen

Datenbanken anzeigen;

Datenbank auswählen (verwenden)

benutze mybatis;

Abfrage des Namens der aktuell verwendeten Datenbank

Datenbank auswählen();

Erstellen einer Datenbank

Datenbank Datenbankname erstellen;

create database if not exists 數據庫名;

Löschen einer Datenbank

Datenbank Datenbankname löschen;

Stellen Sie fest drop database if exists 數據庫名稱;

Datenbanktabellenbezogene Operationen

Erstellen von Datenbanktabellen

Tabelle erstellen Tabellenname(
	Spaltenname 1 Datentyp 1,
	Spaltenname 2 Datentyp 2,
	....
	Spaltenname n Datentyp n
	);

Tabelle kopieren

Tabelle mit Tabellennamen erstellen, der dem zu kopierenden Tabellennamen entspricht;

Alle Tabellen in einer Datenbank anzeigen

Tabellen anzeigen;

Zeigen Sie die Struktur der Datentabelle an

desc pet; oder beschreibe das Haustier;

Tabellennamen ändern

Tabelle ändern; den Tabellennamen in den neuen Tabellennamen umbenennen;

Den Zeichensatz einer Tabelle ändern

Tabelle ändern, Tabellenname, Zeichensatz, Zeichensatzname;

Hinzufügen einer Spalte

Tabelle ändern, Tabellenname, Spaltenname, Datentyp hinzufügen;

Löschen einer Spalte

Tabelle ändern, Tabellenname, Spaltenname löschen;

Löschen einer Tabelle

Tabelle löschen, Tabellenname; oder Tabelle löschen, falls Tabellenname vorhanden ist;

Daten hinzufügen

in Tabellenname (Spaltenname 1, Spaltenname 2, … Spaltenname n) Werte (Wert 1, Wert 2, … Wert n) einfügen;

Die Spaltennamen und Werte müssen eins zu eins übereinstimmen. Wenn nach dem Tabellennamen kein Spaltenname definiert ist, werden standardmäßig allen Spalten Werte hinzugefügt, etwa: in Tabellennamenwerte einfügen (Wert 1, Wert 2, … Wert n); mit Ausnahme von numerischen Typen müssen andere Typen in Anführungszeichen gesetzt werden (einfach oder doppelt).

Löschen von Daten

Löschen aus Tabellenname, wobei Bedingung

Darunter: Wenn keine Bedingungen hinzugefügt werden, werden alle Datensätze in der Tabelle gelöscht. Wenn Sie alle Datensätze löschen möchten, verwenden Sie „Löschen aus Tabellenname“. Dies wird im Allgemeinen nicht empfohlen. Dieser Vorgang führt so viele Löschvorgänge aus, wie Datensätze vorhanden sind.

TRUNCATE TABLE-Tabellenname; empfohlen, da es effizienter ist, zuerst die Tabelle zu löschen und dann dieselbe Tabelle zu erstellen.

Daten ändern

Tabellennamen aktualisieren, Spaltenname 1 = Wert 1, Spaltenname 2 = Wert 2, … festlegen. Dabei gilt die Bedingung: Wenn keine Bedingung hinzugefügt wird, werden alle Datensätze in der Tabelle geändert.

in Benutzer2-Werte einfügen (1, '李四', '123'); // Löschen von Haustier hinzufügen, wobei ower = 'disn'; // Löschen, Aktualisieren, Haustier, Name festlegen = '后裔', wobei ower = 'dfn'; // ändern

Daten abfragen

①> 、< 、<= 、>= 、= 、<>	
②ZWISCHEN...UND	
③ IN (Sammlung)	
④LIKE Fuzzy-Abfrage	
⑤_Ein einzelnes beliebiges Zeichen ⑥%Mehrere beliebige Zeichen ⑦IS NULL 
⑧und oder &&
⑨oder oder|| 
⑩nicht oder!
Beispiele für Abfragebedingungen:
SELECT * FROM Benutzer WHERE Alter >= 18;
SELECT * FROM Benutzer WHERE Alter >= 18 AND Alter <=36;
SELECT * FROM Benutzer, wobei Alter zwischen 40 und 70 liegt;
SELECT * FROM Benutzer WHERE Alter IN (6,18,37);
// Über NULL
SELECT * FROM user WHERE height = NULL; Fehler, da Nullwert nicht = oder (!=) verwenden kann. Beurteilung SELECT * FROM user WHERE height IS NULL; (korrekt)
SELECT * FROM user WHERE height IS NOT NULL; (korrekt)
// Abfrage, wer den Nachnamen Chen hat? < wie>
SELECT * FROM Benutzer WHERE NAME LIKE '陈%';
// Personen abfragen, deren zweiter Buchstabe im Namen neu ist. SELECT * FROM user WHERE NAME LIKE "_新%";
// Personen abfragen, deren Namen drei Zeichen lang sind. SELECT * FROM user WHERE NAME LIKE '___';
// Personen abfragen, deren Namen „Hund“ enthalten. SELECT * FROM user WHERE NAME LIKE '%狗%';

Einschränkungen

Primärschlüsseleinschränkung

Um einen Datensatz in einer Tabelle eindeutig zu identifizieren, können wir einem Feld Einschränkungen hinzufügen, sodass das Feld nicht wiederholt wird und nicht leer ist.

 Tabelle Benutzer erstellen (
	id int primary key auto_increment, // Wenn Sie eine Tabelle erstellen, fügen Sie eine Primärschlüsseleinschränkung hinzu und vervollständigen Sie die automatische Primärschlüsselinkrementierung	
	Name varchar(20)
 );
-- Zusammengesetzter Primärschlüssel: Ein Primärschlüssel, der aus mehreren Feldern besteht, solange sich die Summe der zusammengesetzten Primärschlüssel nicht wiederholt. Kein Feld im zusammengesetzten Primärschlüssel darf leer sein.
Tabelle user2 erstellen (
 	Ich würde int,
 	Name varchar(20),
 	Passwort varchar(20),
 	Primärschlüssel (ID, Name)
);

Nachdem die Tabelle erstellt wurde:

Fügen Sie einen Primärschlüssel hinzu. Beispiel:

①Tabellenbenutzer ändern, Primärschlüssel (ID) hinzufügen;

②Tabelle ändern, Benutzer-ID ändern, Int-Primärschlüssel;

Löschen Sie alter table user drop primary key;

Eindeutigkeitsbeschränkung: Der durch die Eindeutigkeitsbeschränkung geänderte Wert des Felds kann nicht wiederholt werden.

 Tabelle user1 erstellen (
 	ID int Primärschlüssel auto_increment,
 	Telefonnummer varchar(20) eindeutig
 	 );
 Tabelle user2 erstellen (
 	ID int Primärschlüssel auto_increment,
 	Name varchar(20),
 	unique(id, name) // bedeutet, dass die beiden Felder nicht zusammen wiederholt werden );
 	 

Sie können auch nach dem Erstellen der Tabelle eine eindeutige Einschränkung hinzufügen, indem Sie alter table user3 add unique(phone_num); oder alter table user3 modify phone_num varchar(20) unique;
Eindeutige Einschränkung löschen: alter table user3 drop index phone_num;

Nicht null-Einschränkung: Das durch nicht null geänderte Feld kann nicht NULL sein.

Tabelle user3 erstellen (
	ID int Primärschlüssel auto_increment,
	Name varchar(20) nicht null
	);

Löschen Sie die Nicht-Null-Einschränkung: alter table user3 modify name varchar(20);

Standardeinschränkungen

Wenn wir einen Feldwert einfügen und in das entsprechende Feld kein Wert eingefügt ist, wird der Standardwert verwendet. Wenn ein Wert übergeben wird, wird der Standardwert nicht verwendet.

Tabelle erstellen user4(
	ID int Primärschlüssel auto_increment,
	Alter int Standard 18,
	Name varchar(20) nicht null
	);

Fremdschlüsseleinschränkung: Fremdschlüssel

Tabelle erstellen Tabellenname(
....
Fremdschlüsselspalteneinschränkung Fremdschlüsselname Fremdschlüssel (Fremdschlüsselspaltenname) Referenzen Primärtabellenname (Primärtabellenspaltenname)
);
//Klasse Tabellenklassen erstellen(
	id int Primärschlüssel,
	Name varchar(20)
	);	
// Studententabelle Tabelle Student erstellen (
		id int Primärschlüssel,
		Name varchar(20),
		Klassen-ID int,
		Fremdschlüssel (Klassen-ID) verweist auf Klassen (ID)
		);
		

Erweiterte Datenbankabfrage

Alle Datensätze abfragen. Beispiel: Alle Datensätze in der Studententabelle abfragen.

wähle * vom Studenten;

Fragen Sie die angegebenen Felder ab, zum Beispiel: Abfrage Sname, Ssex, Klasse im Student.

Wählen Sie Nachnamen, Geschlecht und Klasse des Schülers aus.

Abfrage aller Einheiten in der Lehrertabelle, also der eindeutigen Abgangsspalte. <Duplikate eindeutig ausschließen>

wählen Sie einen anderen Kurs als den des Lehrers;

Abfrage aller Datensätze in der Punktetabelle, deren Punktestand zwischen 60 und 80 liegt <Abfrageintervall zwischen... und...>

Wählen Sie * aus der Punktzahl, bei der der Abschluss zwischen 60 und 80 liegt;
Wählen Sie * aus der Punktzahl, bei der der Grad > 60 und der Grad < 80 ist;

Fragen Sie die Datensätze mit den Punktzahlen 85, 86 oder 88 in der Punktzahltabelle ab. Wählen Sie „* from score where degree in(85, 86, 88);“

Abfrage der Studententabelle nach Studenten der Klasse „95031“ oder deren Geschlecht „weiblich“ ist. <oder bedeutet entweder>

Wählen Sie *von Student, wobei Klasse = „95031“ oder Geschlecht = „Mädchen“ ist;

Abfrage aller Datensätze in der Studententabelle in absteigender Reihenfolge der Klasse <desc, asc, standardmäßig aufsteigend (ausgelassen)>.

Wählen Sie * aus der Reihenfolge der Studenten nach Klasse absteigend aus;

Fragen Sie alle Datensätze in der Punktetabelle in aufsteigender Reihenfolge der CNO und absteigender Reihenfolge des Grades ab. Wählen Sie * aus der Punktereihenfolge nach CNO asc,degree desc;

Abfrage der Schüleranzahl in Klasse "95031" <Statistikzählung>

Wählen Sie Anzahl(*) aus dem Studenten, wobei Klasse = „95031“ ist.
Abfrage der Matrikel-ID und Kurs-ID des Studenten mit der höchsten Punktzahl in der Punktetabelle (Unterabfrage)

Wählen Sie sno, cno aus der Punktzahl, wobei Grad = (Wählen Sie max(Grad) aus der Punktzahl); wobei: Wählen Sie max(Grad) aus der Punktzahl, um zuerst die höchste Punktzahl zu finden.

select sno,cno degree from score order by degree desc limit 0,1; wobei: die erste Zahl von limit den Startpunkt angibt und die zweite Zahl die Anzahl der Einträge. Bei mehreren identischen Höchstpunktzahlen treten wahrscheinlich Fehler auf, daher wird diese Abfragemethode nicht empfohlen.

Fragen Sie die Durchschnittsnote jedes Kurses ab. Wählen Sie „cno“, „avg(degree)“ aus der Notengruppe nach „cno“ aus.

Abfrage der Durchschnittsnote der Kurse aus der Punktetabelle, die von mindestens 2 Studierenden belegt werden und bei 3 beginnen.

Wählen Sie cno, Durchschnitt (Grad) aus der Punktegruppe nach cno mit count(cno) >= 2 und cno wie ,3 %‘.

Fragen Sie die SNO-Spalte mit Wertungen größer als 70 und kleiner als 90 ab.

Wählen Sie SNO, Grad aus der Punktzahl, wobei der Grad zwischen 70 und 90 liegt;
Fragen Sie die Spalten „sname“, „cno“ und „degree“ aller Studenten ab.
Wählen Sie Sname, CNO, Abschluss von Student, Punktzahl, wobei student.sno = Punktzahl.sno;
Fragen Sie die Spalten „sno“, „cname“ und „degree“ aller Studenten ab. Wählen Sie „sno, cname, degree“ aus „course“, „score“, wobei „course.cno“ = „score.cno“ ist.
Fragen Sie die Durchschnittsnote jedes Kurses für Studierende im Kurs „95031“ ab.
Wählen Sie cno, Durchschnitt (Abschluss) aus der Punktzahl, wobei sno in (Wählen Sie sno vom Studenten, wobei Klasse = „95031“ ist), gruppieren Sie nach cno;
Abfrage der Datensätze aller Studenten, die den Wahlkurs "3-105" belegt haben und deren Punktzahl höher ist als die des Studenten Nr. "109" in "3-105".
Wählen Sie * aus der Punktzahl, wobei cno = „3-105“ und Grad > (Wählen Sie den Grad aus der Punktzahl, wobei sno = „109“ und cno = „3-105“);
Abfrage aller Datensätze, deren Punktzahl höher ist als die des Studenten mit der Matrikelnummer „109“ und der Kursnummer „3-105“ select * from score where degree > (select degree from score where sno = ‚109‘ and cno = ‚3-105‘);
Abfrage aller SNO, SNAME, SBIRTHDAY von Studenten, die im selben Jahr wie Matrikelnummer 108.101 geboren sind
wähle *von Student, wo Jahr(Geburtstag) in (wähle Jahr(Geburtstag) von Student, wo Geburtstag in(108, 101));
Fragen Sie die Noten der vom Lehrer „Zhang Xu“ unterrichteten Schüler ab. Wählen Sie * aus der Punktzahl, wobei cno = (Wählen Sie cno aus dem Kurs, wobei tno = (Wählen Sie tno aus dem Lehrer, wobei tname = „Zhang Xu“));
Abfrage der Namen von Lehrern, deren Schülerzahl an einem Kurs mehr als 5 beträgt.
Wählen Sie tname vom Lehrer, wobei tno = (Wählen Sie tno vom Kurs, wobei cno = (Wählen Sie cno aus der Punktegruppe nach cno mit Anzahl(*) > 5));
Abfrage bei den CNOs für Kurse mit Punktzahlen über 85
Wählen Sie cno, Grad aus der Punktzahl, wobei der Grad > 85 ist;
Abfrage der Punktetabelle der Kurse, die von Lehrern der „Abteilung Informatik“ unterrichtet werden. Wählen Sie * aus der Punktzahl, wobei cno in (wählen Sie cno aus dem Kurs, wobei tno in (wählen Sie tno aus dem Lehrer, wobei depart = „Abteilung Informatik“));
Abfrage von CNO, SNO und Abschluss von Studierenden, die die Wahlpflichtfachnummer „3-105“ belegt haben und deren Noten mindestens besser sind als die der Wahlpflichtfachnummer „3-245“, und Sortierung dieser absteigend nach Abschluss.
irgendeins, mindestens eins.
Wählen Sie * aus der Punktzahl, wobei cno = „3-105“ und Grad > beliebig (wählen Sie den Grad aus der Punktzahl, wobei cno = „3-245“), sortieren Sie nach Grad absteigend;

Fragen Sie CNO, SNO und Abschluss von Studierenden ab, die die Wahlfachnummer „3-105“ gewählt haben und deren Noten besser sind als die von Studierenden, die die Wahlfachnummer „3-245“ gewählt haben, und sortieren Sie sie nach Abschluss von hoch nach niedrig.
alles heißt alles

Wählen Sie * aus der Punktzahl, wobei cno = „3-105“ und Grad > alles (wählen Sie den Grad aus der Punktzahl, wobei cno = „3-245“), sortieren Sie nach Grad absteigend;

Abfrage von Name, Geschlecht und Geburtstag aller Lehrer und Mitschüler

Wählen Sie tname als Namen, tsex als Geschlecht, tbirthday als Geburtstag aus der Lehrergewerkschaft, wählen Sie sname, ssex, sbirthday aus dem Schüler;

Abfrage von Name, Geschlecht und Geburtstag aller Lehrerinnen und Mitschülerinnen

Wählen Sie tname als Namen, tsex als Geschlecht, tbirthday als Geburtstag vom Lehrer, wobei tsex = „Geburtstag“; Vereinigung: Wählen Sie sname, ssex, sbirthday vom Schüler, wobei ssex = „Geburtstag“;

Die Idee hinter der Abfrage der Punktetabelle von Studierenden, deren Punktzahl niedriger ist als die Kurspunktzahl, besteht darin, die entsprechende Punktzahl aus Tabelle A zu finden und sie mit der ausgewählten Durchschnittspunktzahl aus Tabelle B zu vergleichen.

Wählen Sie * aus Punktzahl A, wobei Grad < (Wählen Sie Durchschnitt (Grad) aus Punktzahl B, wobei a.cno = b.cno);
Tabelle a
+-----+-------+--------+
| sno | cno | Grad |
+-----+-------+--------+
| 101 | 3-105 | 91 |
| 102 | 3-105 | 92 |
| 103 | 3-105 | 92 |
| 103 | 3-245 | 86 |
| 103 | 6-166 | 85 |
| 104 | 3-105 | 81 |
| 105 | 3-105 | 88 |
| 105 | 3-245 | 75 |
| 105 | 6-166 | 79 |
| 109 | 3-105 | 76 |
| 109 | 3-245 | 68 |
| 109 | 6-166 | 81 |
+-----+-------+--------+
12 Zeilen im Satz (0,00 Sek.) 

Tabelle b
| sno | cno | Grad |
+-----+-------+--------+
| 101 | 3-105 | 91 |
| 102 | 3-105 | 92 |
| 103 | 3-105 | 92 |
| 103 | 3-245 | 86 |
| 103 | 6-166 | 85 |
| 104 | 3-105 | 81 |
| 105 | 3-105 | 88 |
| 105 | 3-245 | 75 |
| 105 | 6-166 | 79 |
| 109 | 3-105 | 76 |
| 109 | 3-245 | 68 |
| 109 | 6-166 | 81 |
+-----+-------+--------+
12 Zeilen im Satz (0,00 Sek.) 

Abfrage des Namens und der Abreise aller Lehrer

Wählen Sie TName, gehen Sie vom Lehrer weg, wo TNO drin ist (wählen Sie TNO aus Kurs);

Abfrage der Klassengrößen mit mindestens zwei Jungen

wähle eine Klasse aus dem Schüler, wobei ssex= '男' ist, gruppiere nach Klassen mit count(*) > 1

Abfrage der Studententabelle für Studenten, deren Nachname nicht „Wang“ ist

Wählen Sie * vom Studenten aus, wobei der Studentenname nicht wie „王%“ ist;

Fragen Sie den Namen und das Alter jedes Schülers in der Schülertabelle ab

Wählen Sie Sname, Jahr (jetzt ()) – Jahr (Geburtstag) als „Alter“ vom Schüler aus.

Abfrage der maximalen und minimalen Geburtstagsdatumswerte in der Schülertabelle

Wählen Sie max(sbirthday) als „Maximum“, min(sbirthday) als „Minimum“ vom Schüler;

Abfrage aller Datensätze in der Schülertabelle in absteigender Reihenfolge nach Klassennummer und Alter

Wählen Sie * aus der Reihenfolge der Schüler nach Klasse absteigend, Geburtstag;

Abfrage „männlicher“ Lehrer und der von ihnen unterrichteten Kurse

Wählen Sie * aus dem Kurs, wo tno in (Wählen Sie tno aus dem Lehrer, wo tsex = '男');

Abfrage der Spalten „sno“, „cno“ und „degree“ der Studenten mit den höchsten Punktzahlen

Wählen Sie * aus der Punktzahl, wobei Grad = (Wählen Sie max(Grad) aus der Punktzahl);

Abfrage des Nachnamens aller Klassenkameraden des gleichen Geschlechts wie Li Jun

Wählen Sie Sname aus dem Studenten, wobei Ssex = (Wählen Sie Ssex aus dem Studenten, wobei Sname = 'Sex');

Abfrage der Namen von Schülern, die vom gleichen Geschlecht und aus der gleichen Klasse wie Li Jun sind

wähle sname aus dem Studenten, wobei ssex = (wähle ssex aus dem Studenten, wobei sname = "李军") und Klasse = (wähle Klasse aus dem Studenten, wobei sname = '李军');

Abfrage der Punktetabelle aller männlichen Studenten, die den Kurs „Einführung in die Informatik“ belegt haben

select * from score where cno = (select cno from course where cname = ‚Einführung in die Informatik‘) und sno in (select sno from student where ssex = ‚男‘);

Vier Typen von SQL-Joinabfragen

Datenaufbereitung für analytische Anwendungsfälle:
mysql> wähle * von Person;
+----+--------+--------+
| ID | Name | Karten-ID |
+----+--------+--------+
| 1 | Zhang San | 1 |
| 2 | Li Si | 3 |
| 3 | Wang Wu | 6 |
+----+--------+--------+
3 Zeilen im Satz (0,00 Sek.)
mysql> wähle * von Karte;
+------+----------+
| Ich würde | Name |
+------+----------+
| 1 | Essenskarte|
| 2 | CCB-Karte|
| 3 | Landwirtschaftliche Bankkarte|
| 4 | Visitenkarte|
| 5 | Postkarte |
+------+----------+
5 Zeilen im Satz (0,00 Sek.)

Innerer Join

inner join oder join , normalerweise gefolgt von einer on Bedingung
---- Inline-Abfrage: Dabei handelt es sich um Daten in zwei Tabellen. Wenn ein bestimmtes Feld gleich ist, werden die zugehörigen Datensatzdaten abgefragt.
<Die Karten-ID in der aktuellen Tabelle ist dieselbe wie die ID.>

Wählen Sie * aus der inneren Person-Join-Karte auf person.cardId = card.id;
+----+--------+--------+------+-----------+
| ID | Name | Karten-ID | ID | Name |
+----+--------+--------+------+-----------+
| 1 | Zhang San| 1 | 1 | Essenskarte|
| 2 | Li Si | 3 | 3 | Landwirtschaftliche Bankkarte |
+----+--------+--------+------+-----------+
2 Zeilen im Satz (0,00 Sek.)

Äußerer Join

Linker äußerer Join: linker left join oder left outer join
---- Der linke äußere Join ruft alle Daten in der linken Tabelle ab. Wenn die Daten in der rechten Tabelle gleich sind, werden sie angezeigt. Wenn nicht, wird NULL eingetragen.

Wählen Sie * von der linken Person aus, um die Karte beizutreten, auf person.cardId = card.id;

+----+--------+--------+------+-----------+
| ID | Name | Karten-ID | ID | Name |
+----+--------+--------+------+-----------+
| 1 | Zhang San| 1 | 1 | Essenskarte|
| 2 | Li Si | 3 | 3 | Landwirtschaftliche Bankkarte |
| 3 | Wang Wu | 6 | NULL | NULL |
+----+--------+--------+------+-----------+
3 Zeilen im Satz (0,00 Sek.)

Right Outer Join: right join Join oder right outer join

----Der rechte äußere Join ruft alle Daten in der rechten Tabelle ab. Wenn die Daten in der linken Tabelle gleich sind, werden sie angezeigt, andernfalls wird NULL eingetragen.

Wählen Sie * von der richtigen Person aus, um die Karte mit person.cardId = card.id zu verbinden.

+------+--------+--------+------+-----------+
| ID | Name | Karten-ID | ID | Name |
+------+--------+--------+------+-----------+
| 1 | Zhang San| 1 | 1 | Essenskarte|
| 2 | Li Si | 3 | 3 | Landwirtschaftliche Bankkarte |
| NULL | NULL | NULL | 2 | CCB-Karte |
| NULL | NULL | NULL | 4 | Visitenkarte |
| NULL | NULL | NULL | 5 | Postkarte |
+------+--------+--------+------+-----------+
5 Zeilen im Satz (0,01 Sek.)

Vollständiger äußerer Join: full join äußerer Join oder full outer join <MySQL unterstützt keinen vollständigen Join>

mysql> wähle * von Person, vollständige Join-Karte auf person.cardId= card.id;
FEHLER 1054 (42S22): Unbekannte Spalte „person.cardId“ in „on-Klausel“
**** So lösen Sie das Problem, dass MySQL keinen vollständigen Join unterstützt ****
 <Linke Verbindung + rechte Verbindung>, das heißt, die linke und rechte Verbindung durch Vereinigung verbinden. <Linke Verbindung Vereinigung rechte Verbindung>.
z.B:

Wählen Sie * von der linken Person aus, und verbinden Sie die Karte mit person.cardId = card.id. Union. Wählen Sie * von der rechten Person aus, und verbinden Sie die Karte mit person.cardId = card.id.

+------+--------+--------+------+-----------+
| ID | Name | Karten-ID | ID | Name |
+------+--------+--------+------+-----------+
| 1 | Zhang San| 1 | 1 | Essenskarte|
| 2 | Li Si | 3 | 3 | Landwirtschaftliche Bankkarte |
| 3 | Wang Wu | 6 | NULL | NULL |
| NULL | NULL | NULL | 2 | CCB-Karte |
| NULL | NULL | NULL | 4 | Visitenkarte |
| NULL | NULL | NULL | 5 | Postkarte |
+------+--------+--------+------+-----------+
6 Zeilen im Satz (0,01 Sek.)

Wichtige Punkte

Was ist der Unterschied zwischen „where“ und „having“?

(1) Having wird normalerweise vor einer Aggregatfunktion verwendet, um die Aggregatfunktion (MAX, MIN, COUNT, SUM) zu filtern. Having wird normalerweise zusammen mit group by verwendet, da where nicht nach group by hinzugefügt werden kann.
(2) wobei die Gruppierung eingeschränkt wird. Wenn die Bedingung nicht erfüllt ist, wird die Gruppierung nicht durchgeführt. Having wird zur Begrenzung nach der Gruppierung verwendet. Wenn das Ergebnis nicht zufriedenstellend ist, wird es nicht abgefragt. Where kann nicht von einer Aggregatfunktion gefolgt werden, aber having kann zur Beurteilung der Aggregatfunktion verwendet werden.

MySQL führt Anweisungen in einer strengen Reihenfolge aus und kann die Select-Anweisung nicht ändern.
aus
Wo
Gruppieren nach
haben
Bestellen bis

MySQL-Transaktionen

Über Affairs

In MySQL ist eine Transaktion tatsächlich die kleinste unteilbare Arbeitseinheit. Eine Transaktion kann die Integrität eines Unternehmens sicherstellen.

analysieren:

Zum Beispiel:
ein --> -100
Benutzersatz aktualisieren: Geld = Geld – 100, wobei Name = „a“ ist;
b --> +100
Benutzersatz aktualisieren: Geld = Geld + 100, wobei Name = „b“;
-- Wenn im tatsächlichen Programm nur eine SQL-Anweisung erfolgreich ausgeführt wird, die andere jedoch nicht? Dann sind die Daten davor und danach inkonsistent.
Benutzersatz aktualisieren: Geld = Geld – 100, wobei Name = „a“;
Benutzersatz aktualisieren: Geld = Geld + 100, wobei Name = „b“;
Bei mehreren SQL-Anweisungen kann es Anforderungen für gleichzeitigen Erfolg oder gleichzeitiges Fehlschlagen geben.

Transaktionskontrolle

(1) Zu den Transaktionen zählen hauptsächlich automatisches Commit @@autocommit=1;, manuelles Commit; und Transaktions-Rollback;.
(2) MySQL ermöglicht standardmäßig Transaktionen (Auto-Commit).
----Wenn wir eine SQL-Anweisung ausführen, wird der Effekt sofort angezeigt und kann nicht rückgängig gemacht werden.
set autocommit = 0; Legen Sie fest, ob MySQL automatisch committet, <0 für nein, 1 für ja.>
Wählen Sie @@autocommit;, um den automatischen Übermittlungsmodus von MySQL anzuzeigen.
Commit; Manuell committen.
Informationen zur spezifischen Transaktionssteuerung finden Sie in der folgenden Codeanalyse:

mysql> wählen Sie @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
1 Zeile im Satz (0,00 Sek.)
//Tabelle erstellen, Datenbankbank erstellen;
Tabelle Benutzer erstellen (
	id int Primärschlüssel,
 Name varchar(20),
 Geld in
 );
// Fügen Sie zuerst Benutzerdaten a in die Tabelle ein.
in Benutzerwerte einfügen (1, 'a', 1000);
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
// Führen Sie einen Rollback-Vorgang durch.
mysql> Rollback;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
// Überprüfen Sie nach dem Ausführen des Rollbacks die Datentabelleninformationen und stellen Sie fest, dass die eingefügten Daten auch dann noch vorhanden sind, wenn das Rollback aufgerufen wird. Dies bedeutet, dass ein Rollback derzeit nicht möglich ist.
mysql> wähle * vom Benutzer aus;
+----+------+-------+
| ID | Name | Geld |
+----+------+-------+
| 1 | ein | 1000 |
+----+------+-------+
1 Zeile im Satz (0,00 Sek.)
// Sie können das Rollback-Auto-Commit von msql auf „False“ setzen.
setze Autocommit = 0;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> wählen Sie @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 0 |
+--------------+
1 Zeile im Satz (0,00 Sek.)
// Mit anderen Worten: Die obige Operation „set autocommit = 0;“ schaltet das automatische Commit von MySQL aus.
*******Daten erneut einfügen:*******
in Benutzerwerte einfügen (2,'b',1000);
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
//Überprüfen Sie die Tabelle nach dem Einfügen der Daten. Die Daten von Benutzer 2 wurden erfolgreich hinzugefügt.
mysql> wähle * vom Benutzer aus;
+----+------+-------+
| ID | Name | Geld |
+----+------+-------+
| 1 | ein | 1000 |
| 2 | b | 1000 |
+----+------+-------+
2 Zeilen im Satz (0,00 Sek.)
// Führen Sie einen Rollback-Vorgang durch.
mysql> Rollback;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
// Überprüfen Sie nach dem Rollback die Tabelle erneut und stellen Sie fest, dass die gerade eingefügten Daten gelöscht wurden.
mysql> wähle * vom Benutzer aus;
+----+------+-------+
| ID | Name | Geld |
+----+------+-------+
| 1 | ein | 1000 |
+----+------+-------+
1 Zeile im Satz (0,01 Sek.)
**** Wenn Sie in diesem Szenario möchten, dass Benutzer B die Daten erfolgreich übermittelt, können Sie den Befehl „commit;“ verwenden, um eine manuelle Übermittlungsoperation durchzuführen. Wenn Sie die manuelle Übermittlung nach der Übermittlung durch Rollback rückgängig machen möchten, ist dies nicht möglich. Mit anderen Worten: Sobald die Transaktion übermittelt wurde, kann die ausgeführte SQL-Anweisung nicht mehr rückgängig gemacht werden. Dies bedeutet, dass die Daten nach der Übermittlung der Transaktion dauerhaft wirksam sind.



(3) Eine Transaktion manuell starten
Sowohl „begin“ als auch „start transaction“ können eine Transaktion manuell starten. Das heißt, wenn unser aktuelles MySQL standardmäßig im Auto-Commit-Modus ist, ist die Ausführung von „rollback“ zum Zurücksetzen der Transaktion ungültig. Transaktionen können jedoch über „begin“ und „start transaction“ manuell gestartet werden.

Im Augenblick:
 Der aktuelle Standardmodus ist der Auto-Commit-Modus, und die Ausführung eines Rollbacks ist derzeit ungültig. Führen Sie die folgende SQL-Anweisung aus:
 Transaktion starten; (oder beginnen;)
 Benutzersatz aktualisieren: Geld = Geld – 100, wobei Name = „a“;
 Benutzersatz aktualisieren: Geld = Geld + 100, wobei Name = „b“;
 Führen Sie nach dem Einfügen der Benutzerdaten a und b erneut ein Rollback aus und stellen Sie fest, dass die Transaktion erfolgreich zurückgesetzt werden kann. Sie können erfolgreich in den Modus zum manuellen Öffnen von Transaktionen wechseln. Wenn Sie möchten, dass die eingefügten Daten wirksam werden, müssen Sie auch manuell ein Commit ausführen, um den Vorgang festzuschreiben.
 Nachdem die Transaktion gestartet wurde und einmal festgeschrieben ist, kann sie nicht mehr zurückgesetzt werden, d. h., die aktuelle Transaktion ist mit dem Festschreiben beendet.
 

Vier Merkmale von Affären

A Atomarität: Eine Transaktion ist die kleinste Einheit und kann nicht aufgeteilt werden.
C Konsistenz: Transaktionsanforderungen: Es muss garantiert sein, dass SQL-Anweisungen in derselben Transaktion gleichzeitig erfolgreich sind und fehlschlagen.
I Isolierung: Transaktion 1 und Transaktion 2 sind voneinander isoliert.
D Persistenz: Sobald eine Transaktion beendet ist (Commit, Rollback), kann sie nicht zurückgegeben werden.
Transaktionsisolierung: Mehrere Transaktionen sind isoliert und unabhängig voneinander. Wenn jedoch mehrere Transaktionen mit demselben Datensatz ausgeführt werden, können einige Probleme auftreten. Diese Probleme können durch das Festlegen unterschiedlicher Isolationsebenen gelöst werden.

Symptome:

(1) Dirty Read: Eine Transaktion liest Daten, die nicht von einer anderen Transaktion festgeschrieben wurden.
(2) Nicht wiederholbares Lesen (virtuelles Lesen): In derselben Transaktion sind die zweimal gelesenen Daten unterschiedlich.
(3) Phantomlesen: Wenn eine Transaktion alle Datensätze einer Datentabelle bearbeitet (DML) und eine andere Transaktion ein Datenelement hinzufügt, kann die erste Transaktion ihre eigenen Änderungen nicht abfragen.
Lesen nicht festgeschrieben; Lesen nicht festgeschrieben –>Verursachte Probleme: Dirty Read, nicht wiederholbares Lesen, Phantomlesen.
Lesen festgeschrieben; Lesen festgeschrieben –>Probleme: nicht wiederholbares Lesen, Phantomlesen wiederholbares Lesen; wiederholbares Lesen –>Probleme: Phantomlesen
serialisierbar; Serialisierung <sehr schlechte Leistung>

Im Allgemeinen gilt: Je höher die Isolationsstufe, desto schlechter die Leistung.

(1) Überprüfen Sie die Isolationsstufe der Datenbank
MySQL-Standardisolationsebene: REPEATABLE-READ
mysql8.0:
Systemebene: wählen Sie @@global.transaction_isolation;
Sitzungsebene: wählen Sie @@transaction_isolation;
mysql5.x:
Systemebene: wählen Sie @@global.tx_isolation;
Sitzungsebene: wählen Sie @@tx_isolation;

mysql> wähle @@global.transaction_isolation;
+--------------------------------+
| @@global.transaction_isolation |
+--------------------------------+
| WIEDERHOLBARES LESEN |
+--------------------------------+
1 Zeile im Satz (0,00 Sek.)

(2) Ändern Sie die Isolationsstufe
Legen Sie die globale Isolationsebene für Transaktionen fest und lesen Sie nicht fest.

Die drei großen Datenbankparadigmen

Erstes Paradigma

Alle Felder in der Datentabelle sind unteilbare atomare Elemente. Es kann vorab verstanden werden, dass der Feldwert, wenn er weiter aufgeteilt werden kann, nicht der ersten Normalform entspricht.
Beispielsweise gibt es in einer Tabelle ein Adressfeld und der eingefügte Wert lautet „Nr. 11, Baishulin, Bezirk Beilin, Stadt Xi'an, Provinz Shaanxi, China“. Der Wert dieses Felds kann weiter aufgeteilt werden und entspricht im Prinzip nicht der ersten Normalform. Er kann aufgeteilt werden in: Land/Provinz/Stadt/Bezirk/Straße usw.
Natürlich ist es für einige praktische Vorgänge besser, je detaillierter das Paradigmendesign ist. Aber es ist nicht unbedingt von Vorteil. <Beispielsweise werden solche detaillierten Informationen im Adressfeld nach der Aufteilung möglicherweise nie mehr verwendet, sodass eine Aufteilung möglicherweise nicht erforderlich ist.>

Zweites Paradigma

Die zweite Normalform erfordert, dass jede Spalte außer dem Primärschlüssel vollständig vom Primärschlüssel abhängig sein muss, sofern die erste Normalform erfüllt ist. Eine unvollständige Abhängigkeit kann nur bei einem gemeinsamen Primärschlüssel auftreten.

Zum Beispiel:
Tabelle myorder erstellen(
		Produkt-ID int,
		Kunden-ID int,
		Produktname varchar(20),
		Kundenname varchar(20),
		Primärschlüssel (Produkt-ID, Kunden-ID
	);
	In der aktuellen Tabelle hängen andere Spalten als der Primärschlüssel nur von einigen Feldern des Primärschlüssels ab. Dies erfüllt nicht die zweite Normalform und erfordert normalerweise eine Tabellenaufteilung.
Tabelle myorder erstellen(
		order_id int Primärschlüssel,
		Produkt-ID int,
		Kunden-ID int
	);
Tabelle Produkt erstellen (
		id int Primärschlüssel,
		Name varchar(20)
	);
Tabelle Kunde erstellen(
		id int Primärschlüssel,
		Name varchar(20)
		);
Nach der Aufteilung in drei Tabellen ist die zweite Normalform erreicht.

Drittes Paradigma

Das zweite Paradigma muss zuerst erfüllt werden. Es dürfen keine transitiven Abhängigkeiten zwischen anderen Spalten als der Primärschlüsselspalte bestehen.

Anhang

Die an der Abfrage beteiligten SQL-Anweisungen

Tabelle „Student“ erstellen (
	sno varchar(20) Primärschlüssel,
	sname varchar(20) nicht null,
	ssex varchar(20) nicht null,
	Geburtstag, Datum und Uhrzeit,
	Klasse varchar(20)
	);

Tabelle „Student“ erstellen (
	sno varchar(20) Primärschlüssel,
	sname varchar(20) nicht null,
	ssex varchar(10) nicht null,
	Geburtstagsdatum/-zeit,
	Klasse varchar(20)
)

Tabelle Lehrer erstellen(
	tno varchar(20) Primärschlüssel,
	tname varchar(20) nicht null,
	tsex varchar(20) nicht null,
	tGeburtstag Datum/Uhrzeit,
	prof varchar(20) nicht null,
	abreisen varchar(20) nicht null
	);

Tabellenkurs erstellen(
	cno varchar(20) Primärschlüssel,
	cname varchar(20) nicht null,
	tno varchar(20) nicht null,
	Fremdschlüssel (tno) verweist auf Lehrer (tno)
	);

Tabelle erstellen (
	sno varchar(20) nicht null,
	Grad Dezimal,
	Primärschlüssel (sno, cno),
	Fremdschlüssel (sno) verweist auf Student(sno),
	Fremdschlüssel (cno) Referenzen Kurs (cno)
	);

in Studentenwerte einfügen ('101', 'Zeng Hua', 'Männlich', '1977-09-01', '95033');
in Studentenwerte einfügen ('102', '匡明', '男', '1975-10-02', '95031');
in Studentenwerte einfügen ('103', '103', '103', '1976-01-23', '95033');
in Studentenwerte einfügen ('104', '104', '104', '1976-02-20', '95033');
in Studentenwerte einfügen ('105', '王芳', '女', '1975-02-10', '95031');
in Studentenwerte einfügen ('106', '陆君', '男', '1974-06-03', '95031');
in Studentenwerte einfügen ('107', '王尼马', '男', '1976-02-20', '95033');
in Studentenwerte einfügen ('108', 'Studentenname', 'Student', '10.02.1975', '95031');
in Studentenwerte einfügen ('109', '赵铁柱', '男', '1974-06-03', '95031');

in Lehrerwerte einfügen (,804',,Zeit',,Farbe',,1958-12-02',,Zeitraffer',,Zeitrafferfoto');
in Lehrerwerte einfügen (,856',,856',,856',,12.03.1969',,856',,856-Punkte-Quote');
in Lehrerwerte einfügen (,825',,825',,825',,1972-05-05',,825',,825-Punkte-Liste');
in Lehrerwerte einfügen ('831', 'Liu Bing', 'Weiblich', '14.08.1977', 'Lehrassistent', 'Abteilung für Elektrotechnik');

in Kurswerte einfügen ('3-105', 'Einführung in die Informatik', '825');
in Kurswerte einfügen ('3-245', 'Betriebssystem', '804');
in Kurswerte einfügen (,6-166‘,,Digital Circuit‘,,856‘);
in Kurswerte einfügen (,9-888‘,,Höhere Mathematik‘,,831‘);
 
in Score-Werte einfügen('103','3-245','86');
in Score-Werte einfügen('105','3-245','75');
in Score-Werte einfügen('109','3-245','68');
in Score-Werte einfügen('103','3-105','92');
in Score-Werte einfügen('105','3-105','88');
in Score-Werte einfügen('109','3-105','76');
in Score-Werte einfügen('103','3-105','64');
in Score-Werte einfügen('105','6-166','79');
in Score-Werte einfügen('109','6-166','81');


Tabelle Person erstellen(
	ID int Primärschlüssel auto_increment,
	Name varchar(20),
	Karten-ID int
);

Tischkarte erstellen (
	Ich würde int,
	Name varchar(20)
);

in Kartenwerte einfügen (1, ‚Reiskarte‘);
in Kartenwerte einfügen (2, 'CC银行卡');
in Kartenwerte einfügen (3, „Landwirtschaftliche Bankkarte“);
in Kartenwerte einfügen (4, „Visitenkarte“);
in Kartenwerte einfügen (5, ‚Postkarte‘);

in Personenwerte einfügen (1, '张三',1);
in Personenwerte einfügen (2, '李四',3);
in Personenwerte einfügen (3, '王五', 6);



Dies ist das Ende dieses Artikels über häufig verwendete SQL und Befehle von MySQL, vom Einstieg bis zum Löschen von Datenbanken und zum Weglaufen. Weitere relevante Einführungsinhalte zu MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Lösung für das Problem, dass MySQL-Befehle nicht auf Chinesisch eingegeben werden können
  • Detaillierte Erklärung der Kodierungsprobleme bei MySQL-Befehlszeilenoperationen
  • Einführung in die Verwendung von MySQL-Quellbefehlen
  • Implementierung von MySQL mit dem Befehl mysqlbinlog zum Wiederherstellen versehentlich gelöschter Daten
  • Einführung in Abfragebefehle für gespeicherte MySQL-Prozeduren
  • Drei Methoden zum automatischen Vervollständigen von Befehlen in der MySQL-Datenbank
  • Das MySQL-Passwort enthält Sonderzeichen und den Anmeldevorgang über die Befehlszeile
  • Die Ressourcen und Aktivierungsmethoden des MySQL-Desktoptools SQLyog verabschieden sich von der schwarz-weißen Befehlszeile
  • MySQL-Anmelde- und Beendigungsbefehlsformat
  • So verwenden Sie den MySQL-Autorisierungsbefehl „grant“
  • Zusammenfassung der grundlegenden allgemeinen MySQL-Befehle

<<:  Beispielcode eines CSS-responsiven Layoutsystems

>>:  Docker CP kopiert Dateien und gibt den Container ein

Artikel empfehlen

Kapselungsmethode der Vue-Breadcrumbs-Komponente

Vue kapselt die Breadcrumb-Komponente zu Ihrer In...

So implementieren Sie eine MySQL-Master-Slave-Replikation basierend auf Docker

Vorwort Die MySQL Master-Slave-Replikation ist di...

Detaillierte Erklärung von MySQLs Seconds_Behind_Master

Inhaltsverzeichnis Sekunden_hinter_Master Ursprün...

CSS zum Erstellen eines dynamischen sekundären Menüs

Dynamisches Implementieren eines einfachen sekund...

Detaillierte Erläuterung der Verwendung von MySQL Explain (Analyseindex)

EXPLAIN zeigt, wie MySQL Indizes verwendet, um Au...

Der grundlegendste Code für Webseiten

◆Zu Favoriten hinzufügen veranschaulichen Klicken...

Drei gängige Methoden, um HTML-Seiten nach 3 Sekunden automatisch zu springen

In der Praxis stoßen wir häufig auf ein Problem: ...

Schritte zum Erstellen eines Dateiservers mit Apache unter Linux

1. Über den Dateiserver Wenn Sie in einem Projekt...