MySQL-Studiennotizen 04 [Datenbankabfrageoperationen, heutiger Inhalt, Tabelleneinschränkungen]

  • MySQL Document-Dark Horse-Programmierer (Tencent Weiyun): https://share.weiyun.com/RaCdIwas
  • 1-MySQL Foundation.pdf, 2-MySQL-Einschränkungen und Design.pdf, 3-MySQL-Abfrage mit mehreren Tabellen und Transaktionsoperation.pdf
  1. MySQL- Studiennotizen 01 [Datenbankkonzept, Installation und Verwendung von MySQL] [Tag01]
  2. MySQL- Studiennotizen 02 [SQL-Grundkonzepte und allgemeine Grammatik, Datenbank-CRUD-Operationen] [Tag01]
  3. MySQL-Studiennotizen 03 [CRUD-Operationen von Datenbanktabellen, in Datenbanktabellen aufgezeichnete Grundoperationen, clientseitiges grafisches Schnittstellentool SQLyog] [day01]

  4. MySQL- Studiennotizen 04 [Datenbankabfrageoperationen, Tabelleneinschränkungen] [Tag01, Tag02]

  5. MySQL- Studiennotizen 05 [Multi-Table-Operation, drei Paradigmen, Datenbanksicherung und -wiederherstellung] [Tag02]

  6. MySQL- Studiennotizen 06 [Übungen für Abfragen mit mehreren Tabellen, Unterabfragen und Abfragen mit mehreren Tabellen] [Tag03]

  7. Anmerkungen zur MySQL-Studie 07 [Transaktions-, Benutzer- und Berechtigungsverwaltung] [Tag 03]

Inhaltsverzeichnis

Fehler beim Betrieb des Datenbankterminals

07 Datenbankabfrageoperation

DQL_Basic-Abfrage

Entfernen Sie doppelte Ergebnismengen

Berechnen Sie die Summe der Punkte

Alias

DQL_condition-Abfrage

DQL_Basic query_Fuzzy-Abfrage

Der heutige Inhalt

DQL_sort-Abfrage

DQL_aggregate-Funktion

DQL_Group-Abfrage

DQL_Paging-Abfrage

08 Tabelleneinschränkungen

Constraints_Overview

Constraint_non-empty-Einschränkung

Constraint_Unique Constraint

Constraint_primary-Schlüsseleinschränkung

Constraint_Primary Key Constraint_Auto Wachstum

Constraints_Foreign Key Constraints

Fremdschlüsseleinschränkungen - Beispiele für Mängel

Konzepte im Zusammenhang mit Fremdschlüsseleinschränkungen

Constraint_Foreign Key Constraint_Cascade Operation

Kaskaden-Update

Kaskade löschen


Fehler beim Betrieb des Datenbankterminals

Der Befehl, der den Fehler gemeldet hat: FEHLER 1366 (HY000): Falscher Zeichenfolgenwert: '\ xC3 \ xFB \ xD7 \ xD6' für Spalte'n

Lösung (Link zum Originaltext): https://blog.csdn.net/u013317172/article/details/82778785

Viele Menschen erhalten diesen Fehler, wenn sie nach der Installation der MySQL-Datenbank chinesische Daten in die Tabelle einfügen.
FEHLER 1366 (HY000): Falscher Zeichenfolgenwert: '\ xD5 \ xC5 \ xD0 \ xA1 \ xC3 \ xF7' für Spalte 'NAME' in Zeile 1
Fügen Sie hier eine Bildbeschreibung ein

Lösung:

1. Suchen Sie zuerst den Installationspfad der MySQL-Datenbank, wie unten gezeigt:

Fügen Sie hier eine Bildbeschreibung ein

2. Suchen Sie die Datei my.ini in diesem Ordner, suchen Sie darin "default-character-set = utf8" und ändern Sie uft8 in gbk.

Fügen Sie hier eine Bildbeschreibung ein

Melden Sie sich erneut bei der MySQL-Datenbank an, um chinesische Daten hinzuzufügen.

07 Datenbankabfrageoperation

DQL_Basic-Abfrage

1. Abfrage mehrerer Felder

  • Wählen Sie Feldname 1, Feldname 2 ... aus Tabellenname;
  • Hinweis: Wenn Sie alle Felder abfragen, können Sie die Feldliste mit * ersetzen.

2. Entfernen Sie die Duplizierung:

  • deutlich

3. Berechnete Spalte

  • Im Allgemeinen können Sie die vier arithmetischen Berechnungen verwenden, um eine Reihe von Werten zu berechnen (normalerweise nur numerische Berechnungen).
  • ifnull (Ausdruck1, Ausdruck2): Das Berechnungsergebnis der Nullbeteiligung ist null.
    • Ausdruck 1: Welches Feld muss beurteilt werden, ob es null ist
    • Wenn das Feld null ist, der Ersatzwert.

4. Erstellen Sie einen Alias:

  • as: as kann weggelassen werden.
CREATE TABLE student (
  id INT,
  -- 编号
  NAME VARCHAR (20),
  -- 姓名
  age INT,
  -- 年龄
  sex VARCHAR (5),
  -- 性别
  address VARCHAR (100),
  -- 地址
  math INT,
  -- 数学
  english INT-- 英语
) ;

INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES 
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);

SELECT * FROM student;

   

Entfernen Sie doppelte Ergebnismengen

Berechnen Sie die Summe der Punkte

Alias

DQL_condition-Abfrage

1. wo Klausel gefolgt von Bedingungen

2. Betreiber

  • > 、 <、 <= 、> = 、 = 、 <>
  • ZWISCHEN UND  
  • IN (Sammlung) 
  • WIE: Fuzzy-Abfrage
    • Platzhalter:
      • _: ein beliebiges einzelnes Zeichen
      • %: mehrere beliebige Zeichen
  • IST NULL  
  • und 或 &&
  • oder 或 || 
  • nicht oder!
-- 查询年龄大于20岁
SELECT 
  * 
FROM
  student 
WHERE age > 20 ;
SELECT * FROM student WHERE age >= 20;

-- 查询年龄等于20岁
SELECT * FROM student WHERE age = 20;

-- 查询年龄不等于20岁
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;

-- 查询年龄大于等于20 小于等于30
SELECT * FROM student WHERE age >= 20 &&  age <=30;
SELECT * FROM student WHERE age >= 20 AND  age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 闭区间[20, 30]

-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);

-- 查询英语成绩为null
SELECT * FROM student WHERE english = NULL; -- 错误!null值不能使用 = (!=) 判断

SELECT * FROM student WHERE english IS NULL;

-- 查询英语成绩不为null
SELECT * FROM student WHERE english  IS NOT NULL;

DQL_Basic query_Fuzzy-Abfrage

WIE: Fuzzy-Abfrage

  • Platzhalter:
    • _: ein beliebiges einzelnes Zeichen
    • %: mehrere beliebige Zeichen
-- 查询姓马的有哪些? like
SELECT 
  * 
FROM
  student 
WHERE NAME LIKE '马%' ;

-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";

-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';

-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';

Der heutige Inhalt

  1. DQL: Abfrageanweisung
    1. Abfrage sortieren
    2. Aggregatfunktion
    3. Gruppenabfrage
    4. Paging-Abfrage
  2. Zwang
  3. Beziehung zwischen mehreren Tabellen
  4. Paradigma
  5. Datenbanksicherung und -wiederherstellung

DQL_sort-Abfrage

1. Abfrage sortieren

  • Syntax: order by-Klausel
    • Reihenfolge nach Sortierfeld 1 Sortiermethode 1, Sortierfeld 2 Sortiermethode 2 ...
  • Sortieren nach:
    • ASC: Aufsteigende Reihenfolge (Standard).
    • DESC: absteigende Reihenfolge.
  • Hinweis:
    • Wenn mehrere Sortierbedingungen vorliegen, wird die zweite Bedingung beurteilt, wenn der Bedingungswert der aktuellen Seite gleich ist.

DQL_aggregate-Funktion

2. Aggregatfunktion: Nehmen Sie eine Datenspalte als Ganzes und führen Sie vertikale Berechnungen durch.

  1. count: Zähle die Nummer
    1. Wählen Sie im Allgemeinen nicht leere Spalten aus: Primärschlüssel
    2. Anzahl(*)
  2. max: Berechnen Sie den Maximalwert
  3. min: Berechnen Sie den Mindestwert
  4. Summe: Berechnen Sie die Summe
  5. Durchschnitt: Berechnen Sie den Durchschnitt

Hinweis: Bei der Berechnung von Aggregatfunktionen werden Nullwerte ausgeschlossen.

Lösung: 1. Wählen Sie Spalten aus, die für die Berechnung keine nicht leeren Spalten enthalten. 2. IFNULL-Funktion.

  

DQL_Group-Abfrage

3. Gruppenabfrage:

  1. Syntax: Gruppe für Gruppe Feld;
  2. Hinweis:
    1. Felder, die nach dem Gruppieren abgefragt werden sollen: Gruppieren von Feldern, Aggregatfunktionen
    2. Der Unterschied zwischen wo und haben?
      1. Wenn dies vor der Gruppierung definiert ist und die Bedingungen nicht erfüllt sind, wird es nicht an der Gruppierung teilnehmen. Wenn das Ergebnis nach der Gruppierung eingeschränkt ist und nicht zufrieden ist, wird es nicht abgefragt
      2. Aggregatfunktionen können nicht nach wo verfolgt werden, und Aggregatfunktionen können beurteilt werden.
-- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
		
-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math), COUNT(id) FROM student GROUP BY sex;
		
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math), COUNT(id) FROM student WHERE math > 70 GROUP BY sex;

-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math), COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math), COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;

DQL_Paging-Abfrage

4. Paging-Abfrage

  1. Syntax: Index beginnend mit limit, Anzahl der Abfragen pro Seite;
  2. Formel: Startindex = (aktuelle Seitenzahl-1) * Anzahl der auf jeder Seite angezeigten Elemente
    1. 3 Datensätze pro Seite 
    2. SELECT * FROM student LIMIT 0,3; - Seite 1: Von 0 prüfen, 3 Datensätze prüfen
    3. SELECT * FROM student LIMIT 3,3; - Seite 2: Von 3 prüfen, 3 Datensätze prüfen
    4. SELECT * FROM student LIMIT 6,3; - Seite 3:
  3. Limit ist ein MySQL "Dialekt"

08 Tabelleneinschränkungen

Constraints_Overview

Konzept: Begrenzen Sie die Daten in der Tabelle, um die Richtigkeit, Gültigkeit und Vollständigkeit der Daten sicherzustellen.    

Einstufung:

  1. Primärschlüsseleinschränkung: Primärschlüssel
  2. Nicht leere Einschränkung: nicht null
  3. Die einzige Einschränkung: einzigartig
  4. Fremdschlüsseleinschränkung: Fremdschlüssel

Constraint_non-empty-Einschränkung

Nicht leere Einschränkung: nicht null, der Wert kann nicht null sein

    1. Fügen Sie beim Erstellen einer Tabelle die Einschränkung
        CREATE TABLE stu hinzu (
            ID INT,
            NAME VARCHAR (20) NOT NULL - Name ist nicht leer
        ).
    2. Fügen Sie nach dem Erstellen der Tabelle eine nicht leere Einschränkung hinzu: ALTER TABLE stu MODIFY NAME VARCHAR (20) NICHT NULL ;

    3. Löschen Sie die nicht leere Namensbeschränkung: ALTER TABLE stu MODIFY NAME VARCHAR (20);

  

Constraint_Unique Constraint

Eindeutige Einschränkung: Eindeutig, der Wert kann nicht wiederholt werden.

    1.             Fügen Sie beim Erstellen einer Tabelle eine eindeutige Einschränkung hinzu.
        CREATE TABLE stu (
            ID INT,
Telefonnummer VARCHAR (20) UNIQUE - eine eindeutige Einschränkung wird hinzugefügt
        );
        * Beachten Sie, dass in MySQL der Wert einer durch eine eindeutige Einschränkung begrenzten Spalte gelten kann mehrere Nullen.

    2. Löschen Sie die eindeutige Einschränkung: ALTER TABLE stu DROP INDEX phone_number;

    3. Fügen Sie nach dem Erstellen der Tabelle eine eindeutige Einschränkung hinzu: ALTER TABLE stu MODIFY phone_number VARCHAR (20) UNIQUE;

Constraint_primary-Schlüsseleinschränkung

Primärschlüsseleinschränkung: Primärschlüssel

    1. Hinweis:
        1. Bedeutung: nicht leer und eindeutig
        2. Eine Tabelle kann nur ein Feld als Primärschlüssel haben.
        3. Der Primärschlüssel ist die eindeutige Kennung des Datensatzes in der Tabelle

    2.             Fügen Sie beim Erstellen einer Tabelle eine Primärschlüsseleinschränkung hinzu.
        Erstellen Sie eine Tabelle stu (
            id int Primärschlüssel, - fügen Sie einen Primärschlüsseleinschränkungsnamen
varchar (20)
        ) zu id hinzu .

    3. Löschen Sie den Primärschlüssel
        - Fehler Änderungstabelle stu Änderungs-ID int;
        ALTER TABLE stu DROP PRIMARY KEY;

    4.
        Fügen Sie nach dem Erstellen der Tabelle den Primärschlüssel hinzu. ALTER TABLE stu MODIFY id INT PRIMARY KEY;

Constraint_Primary Key Constraint_Auto Wachstum

    5. Automatisches Wachstum:
        1. Konzept: Wenn eine Spalte vom numerischen Typ ist, verwenden Sie auto_increment, um das automatische Wachstum abzuschließen

        2.             Fügen Sie beim Erstellen der Tabelle die Primärschlüsseleinschränkung hinzu und vervollständigen Sie das Selbstwachstum des Primärschlüssels.
        Erstellen Sie eine Tabelle stu (
id int Primärschlüssel auto_increment, - fügen Sie den
            Namen varchar (20) der Primärschlüsseleinschränkung varchar hinzu
        ).

        3. Automatisches Wachstum löschen: ALTER TABLE stu MODIFY id INT;

        4. Automatisches Wachstum hinzufügen: ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

Constraints_Foreign Key Constraints

Fremdschlüsseleinschränkungen - Beispiele für Mängel

CREATE TABLE emp ( -- 创建employe表
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(30),
	age INT,
	dep_name VARCHAR(30), -- 部门名称
	dep_location VARCHAR(30) -- 部门地址
);

-- 添加数据
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('张三', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('李四', 21, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('王五', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('老王', 20, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('大王', 22, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('小王', 18, '销售部', '深圳');

-- 解决方案:分成 2 张表

-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
CREATE TABLE department(
	id INT PRIMARY KEY AUTO_INCREMENT,
	dep_name VARCHAR(20),
	dep_location VARCHAR(20)
);

-- 创建员工表(id,name,age,dep_id)
-- 多方,从表
CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT,
	dep_id INT -- 外键对应主表的主键
);

-- 添加 2 个部门
INSERT INTO department VALUES(NULL, '研发部','广州'),(NULL, '销售部', '深圳');
SELECT * FROM department;

-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);

SELECT * FROM employee;
SELECT * FROM department;

Konzepte im Zusammenhang mit Fremdschlüsseleinschränkungen

* Fremdschlüsseleinschränkungen: Fremdschlüssel, lassen Sie die Tabelle und die Tabelle eine Beziehung haben, um die Richtigkeit der Daten sicherzustellen.

    1. Beim Erstellen einer Tabelle können Sie einen Fremdschlüssel hinzufügen.
        * Syntax:
            Tabelle erstellen Tabellenname (
                ...
                Fremdschlüsselspaltenbeschränkung
                Fremdschlüsselname Fremdschlüssel (Fremdschlüsselspaltenname) verweist auf Haupttabellennamen (Haupttabellenspaltenname)
            ) ;;

    2. Löschen Sie den Fremdschlüssel
        ALTER TABLE Tabellenname DROP FOREIGN KEY Fremdschlüsselname;

    3.
        Fügen Sie nach dem Erstellen der Tabelle den Fremdschlüssel hinzu. ALTER TABLE Tabellenname ADD CONSTRAINT Fremdschlüsselname FOREIGN KEY (Fremdschlüsselfeldname) REFERENZEN Haupttabellenname (Haupttabellenspaltenname); // Primärschlüsselspalte, eindeutige Einschränkungsspalte

CREATE TABLE Mitarbeiter (
    ID INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR (20),
    Alter INT,
    dep_id INT, - Der Fremdschlüssel entspricht dem Primärschlüssel der
    Primärtabelle CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES Abteilung (ID) - Fremdschlüssel Einschränkung
);

 

Constraint_Foreign Key Constraint_Cascade Operation

4. Kaskadenoperation
    1. Fügen Sie die
        Syntax der Kaskadenoperation hinzu : ALTER TABLE Tabellenname ADD CONSTRAINT Fremdschlüsselname 
                    FOREIGN KEY (Fremdschlüsselfeldname) REFERENZEN Haupttabellenname (Haupttabellenspaltenname) ON UPDATE CASCADE ON DELETE CASCADE;
    2. Klassifizierung:
        1 Kaskadenaktualisierung: ON UPDATE CASCADE 
        2. Kaskadenlöschung: ON DELETE CASCADE 

Kaskaden-Update

Kaskade löschen

Was ist der Beginn des Frühlings? Öffne deinen Horizont, öffne deinen Geist, öffne deine Weisheit, öffne das Muster!

Lichun, was ist das? Verlassen Sie sich auf Menschlichkeit, Gerechtigkeit, Loyalität, Aufrichtigkeit und Geist!

Ich denke du magst

Origin blog.csdn.net/weixin_44949135/article/details/113631792
Empfohlen
Rangfolge