【Verwandte Lernempfehlungen:MySQL-Tutorial(Video)】
DCL ist relativ einfach und wird hauptsächlich zum Gewähren oder Widerrufen von Berechtigungen für den Zugriff auf die Datenbank und das Senden der Datenbank verwendet Transaktionen und Rollback.
Nehmen Sie das Erteilen von Berechtigungen als Beispiel: Nachdem wir eine neue Datenbank erstellt haben, möchten wir bestimmten Benutzern Zugriffs- und Betriebsberechtigungen für die Datenbank erteilen (im Allgemeinen aus Sicherheitsgründen die Der Root-Benutzer bedient die Datenbank nicht. Dazu müssen wir zunächst einen bestimmten Benutzer erstellen. SQL-Anweisungen auf Kontrollebene wie DCL werden im Allgemeinen auf der Befehlszeile ausgeführt Geben Sie den MySQL-Docker-Container ein, stellen Sie eine Verbindung zur Datenbank her und übergeben Sie die AnweisungCREATE USER
, um einen neuen Benutzertest
zu erstellen und das Passwort auftest
festzulegen:test
,DCL 这种控制级的 SQL 语句一般在命令行执行,我们进入 MySQL Docker 容器,连接到数据库,通过CREATE USER
语句新建一个test
用户,同时将密码设置为test
:
创建完成后,就可以在mysql.user
数据表中看到这个用户了:
Host
字段为%
表示test
用户可以从任何主机连接到 MySQL 服务器。
或者通过命令行查看(这里用到了 SQL 查询语句):
然后我们就可以运行GRANT
语句授予test
用户对test
数据库的所有操作权限了:
授权后,需要运行flush privileges;
刷新权限,这样就可以在test
数据库的权限列表中看到这个用户了:
如果我们退出当前登录状态,以test
用户登录,就只能看到test
数据库,因为它对其他数据库没有操作权限:
要撤回权限,需要以 root 身份进行,在权限列表删除这个用户,或者在命令行通过REVOKE
语句完成:
revoke all privideges on test.* from 'test'@'%'; flush privileges;
这里操作的都是所有权限,也可以指定特定的权限:
// 授予权限 grant select on test.* to 'user1'@'localhost'; /*给予查询权限*/ grant insert on test.* to 'user1'@'localhost'; /*添加插入权限*/ grant delete on test.* to 'user1'@'localhost'; /*添加删除权限*/ grant update on test.* to 'user1'@'localhost'; /*添加权限*/ // 收回权限 revoke select on test.* from 'jack'@'localhost'; revoke insert on test.* from 'jack'@'localhost'; revoke delete on test.* from 'jack'@'localhost'; revoke update on test.* from 'jack'@'localhost';
数据库事务(Database Transaction)是指作为单个逻辑工作单元执行的一系列操作(对数据库的相关增删改查的操作,包含一条或多条 SQL 语句),要么完全地执行,要么完全地不执行。
对于单条 SQL 语句,数据库系统自动将其作为一个事务执行,这种事务被称为隐式事务。
要手动把多条 SQL 语句作为一个事务执行,可以使用BEGIN
开启一个事务,使用COMMIT
提交一个事务,这种事务被称为显式事务,如果事务执行过程中出现错误或异常,可以通过ROLLBACK
语句回滚事务。
我们在命令行中简单演示下数据库事务的操作:
我们通过BEGIN
语句开启事务,但是在执行多条语句后,没有通过COMMIT
提交事务,测试执行这几条 SQL 语句,进入「浏览」面板查看,发现并没有插入新的记录:
如果在上述 SQL 序列后加上ROLLBACK
回滚事务,效果也是一样的:
BEGIN; INSERT INTO post (`title`, `content, `created_at`) VALUES ('这是一篇测试文章2', '测试内容哈哈哈', '2020-05-26 13:00:00'); INSERT INTO post (`title`, `content, `created_at`) VALUES ('这是一篇测试文章3', '测试内容哈哈哈', '2020-05-26 13:30:00'); ROLLBACK;
而如果在最后加上COMMIT
Nachdem die Erstellung abgeschlossen ist, Sie können diesen Benutzer in der Datentabellemysql.user
sehen:
Host ist %
, was bedeutet, dass
test
Benutzer eine Verbindung zum MySQL-Server herstellen können von jedem Host.
Oder Ansicht über die Befehlszeile (hier wird eine SQL-Abfrageanweisung verwendet):
Dann können wir dieGRANT
-Anweisung ausführen, um demtest
-Benutzertest Alle Betriebsberechtigungen der Datenbank sind jetzt verfügbar: Nach der Autorisierung müssen Sie flushprivilegien;
ausführen, um die Berechtigungen zu aktualisieren, damit Sie diesen Benutzer in der Berechtigungsliste destests sehen können
Datenbank:Wenn wir den aktuellen Anmeldestatus verlassen, test-Benutzer anmeldet, kann er nur dietest
-Datenbank sehen, da diese keine Betriebsberechtigungen für andere Datenbanken hat: Um Berechtigungen zu widerrufen, müssen Sie Sie müssen dies als Root tun, diesen Benutzer in der Berechtigungsliste löschen oder den Befehl verwenden. Die Zeile wird durch die AnweisungREVOKE
vervollständigt: rrreeeHier werden alle Berechtigungen ausgeführt, und es können auch bestimmte Berechtigungen ausgeführt werden angegeben: rrreeeTransaktionsübermittlung/-rollbackDatenbanktransaktion bezieht sich auf eine Reihe von Vorgängen, die von einer einzelnen logischen Arbeitseinheit ausgeführt werden (Vorgänge im Zusammenhang mit dem Hinzufügen, Löschen, Ändern und Abfragen der Datenbank, einschließlich einer oder mehrerer SQL-Anweisungen). , werden entweder vollständig oder gar nicht ausgeführt. Eine einzelne SQL-Anweisung wird vom Datenbanksystem automatisch als Transaktion ausgeführt. Diese Transaktion wird als „implizite Transaktion“ bezeichnet. Um mehrere SQL-Anweisungen manuell als Transaktion auszuführen, können SieBEGIN
zum Öffnen einer Transaktion undCOMMIT
zum Senden einer Transaktion verwenden. Diese Art von Transaktion wird als Explizite Transaktion bezeichnet Wenn während der Transaktionsausführung ein Fehler oder eine Ausnahme auftritt, kann die Transaktion über die AnweisungROLLBACK
zurückgesetzt werden. Wir demonstrieren kurz die Funktionsweise von Datenbanktransaktionen in der Befehlszeile:
Wir haben die Transaktion über die AnweisungBEGIN
gestartet, aber nach der Ausführung mehrerer Anweisungen kam der BefehlCOMMIT
Senden Sie die Transaktion, testen und führen Sie diese SQL-Anweisungen aus, rufen Sie das Bedienfeld „Durchsuchen“ zum Anzeigen auf und stellen Sie fest, dass keine neuen Datensätze eingefügt wurden:Wenn SieROLLBACK
nach der obigen SQL-Sequenz hinzufügen, um die Transaktion zurückzusetzen, ist der Effekt wie folgt dasselbe: rrreeeUnd wenn Sie dieCOMMIT
-Anweisung am Ende hinzufügen, können Sie die Änderung reibungslos übermitteln: In Bezug auf gängige SQL-Anweisungen und visuelle Demonstrationen in phpMyAdmin ist dies der Fall Eine kurze Einführung hier, weitere Details, Sie müssen es in Verbindung mit Online-SQL-Tutorials selbst erkunden. Dies ist nicht der Schwerpunkt dieser Tutorialreihe, daher werde ich hier nicht auf Details eingehen.
Aggregationsfunktionen
Zusätzlich zu gängigen SQL-Abfragen und Operationsanweisungen verfügt SQL auch über einige integrierte Aggregatfunktionen, um eine einfache und bequeme Ergebnisstatistik während der Datenabfrage zu ermöglichen. Hier stellen wir einige gängige Funktionen vor:count
,sum
,avg
,max
undmin
.count
、sum
、avg
、max
和min
。
COUNT
count
函数可用于统计查询结果总共有多少条,通常在进行分页查询时需要用到这个函数。为了方便直接看到结果,我们在命令行中进行演示:
在查询字段时为了提高可读性,可以通过as
指定字段别名,这里post
表总共有三条记录,所以查询结果是3
。
SUM
sum
可用于统计查询结果中某个字段的求和,因此只能用于数字类型字段,这里我们为post
表新增一个字段views
,用于存储对应文章记录的浏览次数。在post
表结构中,选择在content
字段后新增一个字段并点击「执行」:
将字段名设置为views
,并将其类型设置为UNSIGNED INT
,表示非负整数,同时设置默认值为0
,对应的 SQL 语句可以通过预览功能查看:
点击「保存」创建这个字段,就可以在表结构中看到它了:
由于views
有默认值,所以目前所有记录的views
值都是 0:
可以通过「编辑」功能将其设置为对应的模拟值:
接下来,我们就可以通过sum
函数对结果进行求和统计了:
AVG
avg
可用于统计查询结果中某个字段的平均值,和sum
一样,也是作用于数字类型字段,比如我们可以通过它来统计所有文章的平均浏览数:
如果是一个不能被整除的数字,平均数会精确到小数点后四位。
MAX
max
可用于获取查询结果中某个数字类型字段的最大值,比如要获取浏览数最高的文章信息可以这么做:
MySQL 命令行默认中文乱码,我们可以通过set names utf8mb4;
将编码类型设置为utf8mb4
,这样就可以正常显示中文和 Emoji 表情符号了。
另外,这里还用到了子查询的概念,就是将一个查询的结果作为另一个查询的条件,这里我们将最大浏览数作为子查询的结果传递给父查询作为查询条件,获取对应的文章信息。
MIN
与max
相对,min
COUNT
count
-Funktion kann verwendet werden, um die Gesamtzahl der Abfrageergebnisse zu zählen. Diese Funktion wird normalerweise bei der Durchführung von Paging-Abfragen verwendet. Um die Ergebnisse direkt zu sehen, demonstrieren wir in der Kommandozeile:
Um die Lesbarkeit beim Abfragen von Feldern zu verbessern, können Sie Feldaliase überas
angeben. Hier enthält die Tabellepost
insgesamt drei Datensätze , daher lautet das Abfrageergebnis „3
“.
SUM
sum
kann verwendet werden, um ein bestimmtes Feld in den statistischen Abfrageergebnissen zu summieren, daher kann es nur für numerische Felder verwendet werden, hier sind wirpost
Der Tabelle wird ein neues Feldviews
hinzugefügt, in dem die Anzahl der Ansichten des entsprechenden Artikeldatensatzes gespeichert wird. Fügen Sie in der Tabellenstrukturpost
nach dem Feldcontent
ein neues Feld hinzu und klicken Sie auf „Ausführen“:
Setzen Sie den Feldnamen auf
views
und legen Sie den Typ auf UNSIGNED INT
, der eine nicht negative Ganzzahl darstellt, und der Standardwert ist auf
0
gesetzt. Die entsprechende SQL-Anweisung kann über die Vorschaufunktion angezeigt werden:
Da
views
einen Standardwert hat, ist der
views
-Wert aller Datensätze derzeit 0:
Sie können es auf „durch“ setzen die Funktion „Bearbeiten“ Entsprechender Simulationswert:
Als nächstes können wir die Ergebnisse mit der Funktion
sum
zusammenfassen:
AVG
avg
kann verwendet werden, um den Durchschnittswert eines Feldes in den Abfrageergebnissen zu zählen, und
sum
ist dasselbe und funktioniert auch bei numerischen Feldern. Wir können es beispielsweise verwenden, um die durchschnittliche Anzahl der Aufrufe aller Artikel zu zählen:
Wenn es sich um eine Zahl handelt, die nicht teilbar ist, ist der Durchschnitt auf vier Dezimalstellen genau .
MAX
max
kann verwendet werden, um den Maximalwert eines numerischen Felds in den Abfrageergebnissen abzurufen, um beispielsweise die Artikelinformationen mit der höchsten Anzahl an Ansichten abzurufen. Sie können dies tun:
MySQL-Befehl Da die Zeile standardmäßig verstümmelte chinesische Zeichen verwendet, können wir set name utf8mb4; übergeben. Stellen Sie den Kodierungstyp auf
utf8mb4
ein, damit chinesische und Emoji-Emoticons normal angezeigt werden können. Darüber hinaus wird hier auch das Konzept der
Unterabfrageverwendet, bei dem das Ergebnis einer Abfrage als Bedingung für eine andere Abfrage verwendet wird. Hier übergeben wir die maximale Anzahl von Ansichten als Ergebnis Unterabfrage an die übergeordnete Abfrage als Abfragebedingungen, um die entsprechenden Artikelinformationen zu erhalten.
MIN
Relativ zu
max
wird die Funktion
min
verwendet, um den Mindestwert eines numerischen Felds im Abfrageergebnis zu erhalten, z Anzahl der Aufrufe Die Mindestinformationen für den Artikel können wie folgt lauten: ZusammenfassungOkay, was die grundlegenden Abfragen, Vorgänge und Statistiken der MySQL-Datenbank betrifft, werden wir sie hier meiner Meinung nach kurz vorstellen von MySQL und seinen Operationen. Im nächsten Tutorial stellen wir Ihnen vor, wie Sie in PHP eine Verbindung zur MySQL-Datenbank herstellen und einige komplexere Vorgänge wie Paging, Gruppierung, Verbindungsabfrage, Zuordnungsbeziehung und Indexeinstellung durchführen und Anwendung werden wir es in nachfolgenden Tutorials besprechen und anhand konkreter Beispiele demonstrieren. Dieser Artikel stammt von https://xueyuanjun.com/post/21656Wenn Sie weitere verwandte Artikel erfahren möchten, achten Sie bitte auf die Spalte php mysql!
Das obige ist der detaillierte Inhalt vonMySQL verwendet grundsätzlich (2) DCL-Anweisungen und Aggregatfunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!