MySQL DML erweitert, Paging-Suche, SQL-Einschränkungen, Lernen von Operationen mit mehreren Tabellen

  • Xiaojies mysql-Datenbank-Lernaufsätze, die Zusammenfassung und die Fortsetzung sind in Vorbereitung.
  • Xiaojie ist neu bei mysql. Wenn es viele unangemessene Ausdrücke oder falsche Ansichten gibt, hoffe ich, dass die Leser mich korrigieren können, und ich hoffe, Sie können Xiaojie mehr unterstützen.
  • Alle lernen und entwickeln sich gemeinsam im Geiste des gegenseitigen Lernens und des gemeinsamen Fortschritts. 

Der vorherige Artikel ist wunderbar

  • Erster Einstieg in MySQL

Ein erster Einblick in die MYSQL-Datenbank, geschickte Verwendung von SQL -Anweisungen und grafische Benutzeroberfläche zur Verbesserung der Effizienz

  • MySQL-Detailkenntnisse und diverse Abfrageoperationen werden verfeinert

Verständnis des Ausführungsprozesses von Datenbankanweisungen, Lernen der Speicher-Engine, Verständnis des Zeichensatzes sowie Verständnis verschiedener SQL-Datentypen Einführung plus verschiedene SQL-Datenabfrageanalysen und Themenübungen Einführung in das Verständnis verschiedener SQL-Datentypen plus verschiedene SQL-Datenabfrageanalysen und Themenübungen https:// blog.csdn.net/weixin_53695360/article/details/123571592

1. Was ist DML und die grundlegenden Operationen von DML, die Aktualisierungsoperation von Tabellenspalten und -zeilen

  • Bearbeitungsvorgänge für Spalten

#首先简单的创建一个student表为后序操作做准备
use test;
create table student (
	id int,
	name varchar(8),
	age tinyint
) engine = innodb default charset = utf8mb4;
desc student;
  • Neue Spalte hinzufügen, Format: Tabelle ändern Tabellenname neuen Spaltennamen hinzufügen Datentyp (Länge);
alter table student add addr varchar(20);
#新增一个addr列出来
  • Datentyp (Länge) der Spalte ändern, Format: Tabelle ändern Tabellenname Spaltenname ändern geänderter Datentyp (Länge);
alter table student modify addr varchar(15);
#修改student表中addr列的数据类型 (长度修改)
alter table student modify addr char(20);
#修改student表中addr列的数据类型 (类型修改为char(20))
  • Ändern Sie den Namen der Spalte, Format: Tabelle ändern Tabellenname Spaltenname ändern Neuer Spaltenname Neuer Spaltenname Datentyp (Länge);
alter table student change addr stu_addr varchar(20);
# change 相比 modify 而言功能更加强大可以修改列名字. 
# modify不可以修改列名
  • Lösche die angegebene Spalte, formatiere: alter table table name drop column name;
alter table student drop stu_addr;
# 删除student表中的stu_addr列
  • Es wird nicht empfohlen, die oben genannten Änderungsoperationen auf die Spaltenstruktur der Tabelle anzuwenden, da die Datenbanken vieler Unternehmen sehr groß sind und das Ändern einer Datenspalte keine triviale Angelegenheit ist.Wenn die Änderung nicht gut ist, wird sie es sein schlecht, wenn die Daten verloren gehen.
  • Verschiedene Operationen auf Tabellenzeilen und Tabellendatensätzen (Hinzufügen, Löschen, Ändern, Prüfen)

Tabellensatz einfügen

  • Methode 1, füge in das angegebene Feld das Format ein: füge in den Tabellennamen (Feld 1, Feld 2, ...) Werte (Wert 1, Wert 2, ...) ein;              ich nenne diese Methode das Einfügen der spezifiziertes Feld Operationen, Felder und Zuweisungen sollten in Eins-zu-Eins-Entsprechung stehen
insert into student(id, name, age) values(1000, '张三', 18);
# 向student表中插入一条id 为1000 name 为张三, age 18的记录
insert into student(id, name, age)
values(1001, '李四', 20),
(1002, '王五', 22),
(1003, '胖子', 25);
#还可以支持values后面跟上多条记录
#每条记录之间使用,隔开

  •  Methode 2, Werte in alle Felder einfügen, Format: Werte in Tabellennamen einfügen (Wert 1, Wert 2, ...);
  • Das heißt, standardmäßig werden alle Felder nacheinander eingefügt, sodass wir die Felder nicht schreiben müssen.
insert into student
values(1004, '李四他爸', 47),
(1005, '王五它妈', 40),
(1006, '胖子它老特', 20);
#可以向这样不指定任何字段,默认顺序插入所有字段

 Zusammenfassung der Vorsichtsmaßnahmen beim Einfügen:

  1. Werte und Felder müssen der gleichen Nummer und dem gleichen Typ entsprechen
  2. Die Datengröße des Werts muss innerhalb der angegebenen Feldlänge liegen
  3. Außer bei Integer\Dezimal-Typen müssen Werte anderer Feldtypen in Anführungszeichen eingeschlossen werden (einfache Anführungszeichen werden empfohlen)
  4.  Wenn Sie einen Nullwert einfügen möchten, können Sie das Feld leer lassen oder Null einfügen

Tabellendatensatz aktualisieren

  • Syntaxformat: Tabellenname aktualisieren Feld 1=Wert, Feld 2=Wert... wobei Bedingung;     
update student set name = '胖子他爹' where id = 1005;
# 跟新student表中id = 1005这条记录的name为胖子他爹

update student set name = '我是你爸', age = 100 where id = 1005;
# 跟新student表中id = 1005这条记录的name为我是你爸, age为100

 Zusammenfassung und Vorsichtsmaßnahmen für den Betrieb neuer Datensätze:

  1. Der Typ des Spaltennamens sollte mit dem geänderten Wert übereinstimmen
  2. Der Wert darf den Längenbereich des Felds beim Ändern des Werts nicht überschreiten
  3. Mit Ausnahme von Integer\Decimal-Typen muss der Wert anderer Feldtypen in Anführungszeichen eingeschlossen werden

Tabelleneintrag löschen

  • Syntaxformat: aus Tabellenname löschen, wobei Bedingung;
delete from student where id = 1005;
# 从student 表中删除id=1005这条记录
delete from student where name = '胖子'
# 从student 表中删除name=胖子这条记录

Es ist immer noch notwendig, die Operationen des Hinzufügens, Löschens, Modifizierens und Überprüfens von Datensätzen zu üben, da Operationen wie das Modifizieren, Löschen und Hinzufügen bestimmter Datensätze in der Datenbank ziemlich üblich sind.

2. Lösen Sie das Problem der Paging-Suche links im vorherigen Artikel

  •  Was ist das Obige? Ich glaube, dass jeder, der gerne Datensätze sucht oder einkauft, nicht unbekannt ist. Diese Art der Anzeige von Datensätzen besteht darin, Datensätze auf Seiten anzuzeigen (Seitensuche).
  • Paging-Abfrageformat: select * from table name limit startRow, pageSize;
#模拟这样一个场景, 每一页5条数据
select * from student limit 0, 5;  # 第一页
select * from student limit 5, 5;  # 第二页
select * from student limit 10, 5; # 第三页
  • Eine Frage, zu diesem Zeitpunkt kennen wir alle die Anzahl der Datenbalken auf jeder Seite, und die Seitengröße ist festgelegt.Das Problem ist, dass, wenn wir die startRow?
-- 后台计算出页码、页数(页大小)
-- 分页需要的相关数据结果分析如下,
-- 注意:下列是伪代码不用于执行
int curPage = 2; -- 当前页数
int pageSize = 5; -- 每页显示数量
int startRow = (curPage - 1) * pageSize; -- 当前页, 记录开始的位置(行数)计算
  • Tatsächlich müssen wir nur die aktuelle Seitenzahl (Anzahl der Seiten - 1) * Seitengröße kennen, um startRow zu kennen

3. Detaillierte Erläuterung der SQL-Einschränkungen

  • Definition von Einschränkungen

  • Ich muss wirklich etwas über Constraints lernen. Lassen Sie uns zuerst herausfinden, was Constraints sind. Eigentlich ist es ganz einfach. Constraints sind eine Art Einschränkung, also können Sie diesen Steuerbereich nicht überschreiten.
  • Die Einschränkung in der Datenbank bedeutet, dass der Dateninhalt in der Tabelle nicht beliebig ausgefüllt werden kann, sondern gemäß den Anforderungen ausgefüllt werden muss, um die Integrität und Sicherheit der Daten zu gewährleisten

  • PRIMARY KEY-Einschränkung   

  • Was ist eine Primärschlüssel-Einschränkung: eine eindeutige Einschränkung, die nicht null ist Die Primärschlüssel-Einschränkung ist nicht NULL und identifiziert einen Datensatz eindeutig, fast jede Tabelle muss eine solche Einschränkung haben

Primärschlüsseleinschränkung hinzufügen

  • Methode 1: Deklarieren Sie beim Erstellen einer Tabelle in der Feldbeschreibung das angegebene Feld als Primärschlüssel:
  • Format: Feldname Datentyp [Länge] Primärschlüssel;
create table user_table(
	id int primary key, #添加主键约束
	name varchar(10),
	age tinyint
) engine = innodb charset = utf8mb4;
  • Die Primärschlüsseleinschränkung identifiziert den Datensatz eindeutig und darf nicht leer sein
insert into user_table
values(1001, '翠花', 18);
#插入第一条记录翠花是没有问题的
insert into user_table
values(1001, '王五', 20);
#插入这条记录应当是报错, 重复插入主键了
# [Err] 1062 - Duplicate entry '1001' for key 'PRIMARY'
# 重复加入1001 作为主键

  • Die Primärschlüsseleinschränkung darf nicht null sein ( anders als der eindeutige Primärschlüssel ) .
insert into user_table
values(null, '大胖', 30);
# 区别唯一约束, 主键约束不可以为null
#[Err] 1048 - Column 'id' cannot be null
  • Methode 2: Deklarieren Sie beim Erstellen einer Tabelle im Einschränkungsbereich das angegebene Feld als Primärschlüssel
  • Syntaxform:     [Beschränkungsname] Primärschlüssel (Feldliste)
  • Was ist die Notwendigkeit des Aussehens?Die Notwendigkeit dieser Methode besteht darin, einen gemeinsamen Primärschlüssel hinzuzufügen.Die Verwendung des spezifischen gemeinsamen Primärschlüssels wird in der Zwischentabelle unten angewendet.Hier lernen wir zuerst, wie man erstellt
create table persons (
	pid int,
	lastname varchar(255),
	firstname varchar(255),
	address varchar(255),
	constraint persons_pk primary key(lastname, firstname) 
	#通过constraint 增添联合主键
) engine = innodb default charset = utf8mb4;
  • Überlegen Sie, warum die Einschränkung des gemeinsamen Primärschlüssels erforderlich ist. Der Primärschlüssel muss verwendet werden, um verschiedene Datensätze zu identifizieren. Manchmal gibt es eine solche Situation,     wir müssen Name + Geschlecht verwenden, um verschiedene Objekte gleich zu identifizieren     (leider gibt es Jungen und Mädchen namens Wang Yujie In diesem Fall kann nur der Name nicht unterschieden werden. In diesem Fall kann der Primärschlüssel mit anderen Feldern kombiniert werden, um die Identifizierung einzuschränken.)
  • Methode 3: Deklarieren Sie nach dem Erstellen der Tabelle das angegebene Feld als Primärschlüssel, indem Sie die Tabellenstruktur ändern:
  • Format: änderbarer Tabellenname add [Beschränkungsname] Primärschlüssel (Feldliste)
alter table user_table 
add constraint name_id_pk primary key(name, id);
# 向user_table表中增加一个name + id的联合主键

Primärschlüsseleinschränkung entfernen

  • Format: Tabelle ändern Tabellenname Primärschlüssel löschen;
alter table user_table drop primary key;
# 删除user_table表中的主键约束

Auto-Increment-Spalte (führt ein, wie Primärschlüssel-Einschränkungen davon getrennt werden können)

  • Normalerweise möchten wir, dass die Datenbank den Wert des Felds jedes Mal automatisch generiert, wenn ein neuer Datensatz eingefügt wird
  • Insbesondere das Primärschlüsselfeld, wenn es nur als markierter Datensatz verwendet wird, besteht für uns absolut keine Notwendigkeit, den Wert zu setzen.
  • Wir können das Schlüsselwort auto_increment (Auto-Increment-Spalte) in der Tabelle verwenden, der Typ der Auto-Increment-Spalte muss Integer sein und die Auto-Increment-Spalte muss der Schlüssel sein (normalerweise für den Primärschlüssel).

Format: Feldname ganzzahliger Typ [Länge] [Einschränkung] auto_increment

create table test(
	id int primary key auto_increment,
	# 添加一个主键约束, 设置自动增长. 默认增长为1
	age tinyint,
	name varchar(20)
) engine = innodb default charset = utf8mb4;

insert into test values(null, 18, '小呼噜');
# 我们设置了主键自动递增可以不再需要传入主键字段
# 或者主键传入null 他会自动设置从1开始默认增量1

  • Oder beim Einfügen in ist es in Ordnung, nichts zu übergeben, und es kann auch null übergeben werden

  • Wenn wir jedoch dasselbe wie oben verwenden möchten, müssen wir darauf achten, das einzufügende Feld anzugeben, andernfalls werden standardmäßig drei Werte angegeben. Wenn wir das Einfügefeld angeben, müssen wir die ID nicht angeben. das    ist ein bisschen wie der Standardwert.
  • Keine NULL-Einschränkung

  • NOT NULL-Einschränkung: Die Spalte akzeptiert keine NULL-Werte. Felder müssen immer einen Wert enthalten. Das bedeutet, dass Sie keine neuen Datensätze einfügen oder Datensätze aktualisieren können, ohne dem Feld einen Wert hinzuzufügen.

Fügen Sie eine Nicht-Null-Einschränkung hinzu

  • Format: Feldname Datentyp [Länge] NOT NULL
drop table test;
create table test(
	id int primary key auto_increment,
	name varchar(10) not null,#设置非null 插入数据不能传入null
	age tinyint
) engine = innodb auto_increment = 10 default charset = utf8mb4;
# 我们还可以向这般指定auto_increment的值
insert test values(null, null, 28);
# 会出错, 第二个字段增加了not null 约束
# 传空会报错[Err] 1048 - Column 'name' cannot be null

Entfernen Sie die Nicht-Null-Einschränkung   

  • Format: Tabelle ändern Tabellenname Feldname ändern Datentyp [Länge]
alter table test modify name varchar(10);
# 非常简单的方式, 直接更改数据类型的不加null约束即可
desc test;

  • einzigartige Beschränkung

  • Unique Constraint: Der Wert der angegebenen Spalte darf nicht wiederholt werden.

Notiz: 

  1. Sowohl UNIQUE- als auch PRIMARY KEY-Einschränkungen bieten eindeutige Garantien für Spalten. PRIMARY KEY ist eine automatisch definierte UNIQUE-Einschränkung.
  2.  Jede Tabelle kann mehrere UNIQUE-Einschränkungen haben, aber jede Tabelle kann nur eine PRIMARY KEY-Einschränkung haben.
  3.  UNIQUE beschränkt die Anzahl der Vorkommen von Nullwerten nicht

Eindeutigkeitsbeschränkung hinzufügen

  • Genauso wie der Primärschlüssel hinzugefügt wird, gibt es 3 Typen, von denen ich hier einige Beispiele geben werde
drop table test;
create table test (
	id int unique,	# 添加一个唯一约束
	name varchar(20) not null,
	age tinyint
) engine = innodb default charset = utf8mb4;
desc test;
insert into test values(null, '张三', 19);
# 允许传入null  区别primary key
insert into test 
values(1, '李四', 30),
(1, '王五', 38);  
#报错[Err] 1062 - Duplicate entry '1' for key 'id'

  • Format 2: [Beschränkungsname] UNIQUE (Feld) entspricht dem Primärschlüsselmodus 2
  • Format 3: ALTER TABLE Tabellenname ADD [CONSTRAINT Name] UNIQUE (Feld) Vergleichsmethode 3

Löschen Sie die Unique-Einschränkung auf die gleiche Weise, wie Sie gerade die Primärschlüssel-Einschränkung gelöscht haben

  • Standardeinschränkungen

  • Standardeinschränkung: Wird verwendet, um den Standardwert des Felds anzugeben. Wenn beim Einfügen eines Datensatzes in die Tabelle das Feld nicht explizit zugewiesen wird, wird automatisch der Standardwert zugewiesen
  • Fügen Sie eine Standardeinschränkung hinzu und fügen Sie das Format beim Erstellen der Tabelle hinzu: Feldname Datentyp [Länge] DEFAULT Standardwert
CREATE TABLE persons (
 pid INT,
 lastname VARCHAR(255),
 firstname VARCHAR(255),
 address VARCHAR(255) DEFAULT '香港' -- 添加默认约束
)engine = innodb default charset = utf8mb4;
# 传入null 则会按照default 赋值
insert into persons(pid, lastname, firstname) 
values(2, '德华', '刘');
# 或者指定字段, default字段可以不用传入val

4. Mehrtischbetrieb

  • Ursprünglich hatte ich geplant, die Multi-Table-Operation auf einmal einzubeziehen und einheitlich damit umzugehen, aber ich fand, dass die Multi-Table-Operation ziemlich mühsam zu sein scheint, und Xiaojie konnte es eine Weile nicht herausfinden, also wird Xiaojie es tun weiter im nächsten Kapitel         (Danke an alle für die Unterstützung von Xiaojie ha)

5. Zusammenfassung dieses Artikels

  • Über die Spaltenoperation der Tabelle (hinzufügen, löschen, ändern, prüfen) wird am Anfang das Schlüsselwort alter, gefolgt von add modify change drop

Tabelle ändern Tabellenname Spaltenname hinzufügen Typ (Länge) eine neue Spalte hinzufügen

Tabelle ändern Tabellenname Spaltenname ändern Oldtype Newtype Nur Typänderung für eine Spalte

Tabelle ändern Tabellenname alten Spaltennamen ändern neuen Spaltennamen alter Typ neuer Typ kann Typ- und Listenänderungen für eine Spalte durchführen

alter table Tabellenname drop Spaltenname Löschvorgang für eine Spalte

  • Aufzeichnen von Operationen an Tabellen ( hinzufügen, löschen, ändern, prüfen )

in den Tabellennamen einfügen (Feld angeben) Werte (Wert angeben), (Wert angeben); Feldwert angeben (Einfügen-Datensatz)

Werte in Tabellennamen einfügen (alle Felder werden der Reihe nach geschrieben); Feldwerte entsprechend der Reihenfolge der Tabellenfelder einfügen

update table name set field = value wobei Bedingung angegeben record change record

delete from table name where Bedingung angegebene Datensätze löschen Datensätze, die die Bedingungen aus der angegebenen Tabelle erfüllen

  • Lernen über verschiedene Einschränkungen

Eine Einschränkung ist eine Einschränkung

Primärschlüsseleinschränkung (entspricht einer Kombination aus Eindeutigkeitseinschränkung + Nicht-Null-Einschränkung), die zum eindeutigen Identifizieren von Datensätzen in der Tabelle verwendet wird

Die Eindeutigkeitsbeschränkung wird auch nicht wiederholbar gehalten, der Spaltenfeldwert ist eindeutig, aber Null ist zulässig

Nicht-Null-Einschränkung Das heißt, Null ist nicht zulässig und Null kann nicht als Parameter übergeben werden

Standardeinschränkung: Wenn null übergeben wird, ist der Standardfeldwert der anfängliche Standardwert

Freunde, obwohl die heute vorgestellten Dinge nicht schwierig sind, müssen wir die einfachen Dinge im Detail beherrschen. Wenn möglich, sollten wir unser Bestes geben, um sie zu testen. Ich wünsche Ihnen viel Erfolg bei Ihrem Studium, Ihrem Aufstieg und Ihrer Gehaltserhöhung.

Ich denke du magst

Origin blog.csdn.net/weixin_53695360/article/details/123711464
Empfohlen
Rangfolge