Heim  >  Artikel  >  Datenbank  >  Analyse grundlegender Betriebsbeispiele der MySQL-Datenbank

Analyse grundlegender Betriebsbeispiele der MySQL-Datenbank

WBOY
WBOYnach vorne
2023-05-26 23:27:541699Durchsuche

1. Einführung in MySQL

1. Klassifizierung von Datenbankverwaltungssoftware

Hauptsächlich unterteilt in relationale und nicht relationale.

Es kann einfach verstanden werden, dass relationale Datenbanken eine Tabellenstruktur haben müssen, während nicht relationale Datenbanken Schlüsselwertdaten speichern und keine Tabellenstruktur haben.

Relationaler Typ: wie SQLite, DB2, Oracle, Access, SQL Server, MySQL. Hinweis: SQL-Anweisungen sind universell.

Nicht relational: Mongodb, Redis, Memcache

2, MySQL

MySQL ist ein relationales Datenbankverwaltungssystem, das von der schwedischen Firma MySQL AB entwickelt wurde und derzeit ein Produkt von Oracle ist.

MySQL ist eines der beliebtesten relationalen Datenbankverwaltungssysteme. In Bezug auf WEB-Anwendungen ist MySQL die beste RDBMS-Anwendungssoftware (Relationales Datenbankverwaltungssystem).

SQL-Sprache ist die am häufigsten verwendete standardisierte Sprache und wird für den Zugriff auf die MySQL-Datenbank verwendet. MySQL-Software verfolgt eine duale Lizenzierungsrichtlinie und ist in eine Community-Version und eine kommerzielle Version unterteilt. Aufgrund seiner geringen Größe, der hohen Geschwindigkeit, der niedrigen Gesamtbetriebskosten und insbesondere der Eigenschaften von Open Source wird MySQL im Allgemeinen als Website-Datenbank für verwendet Entwicklung kleiner und mittlerer Websites.

MySQL stellt uns Open-Source-Installationspakete für verschiedene Betriebssysteme zur Verfügung, darunter Mac, Linux und Windows.

2. Speicher-Engine (auch Tabellentyp genannt)

Daten werden in MySQL mithilfe verschiedener Technologien in Dateien (oder Speicher) gespeichert. Verschiedene Technologien nutzen ihre eigenen einzigartigen Speichermechanismen, Indizierungstechniken und Sperrebenen und bieten so eine Vielzahl von Funktionen und Fähigkeiten. MySQL bezeichnet diese verschiedenen Technologien und zugehörigen Funktionen als Speicher-Engines, die auch als Tabellentypen bezeichnet werden können.

MySQL ist standardmäßig mit vielen verschiedenen Speicher-Engines konfiguriert, die im MySQL-Server voreingestellt oder aktiviert werden können.

1. Gängige Speicher-Engines und anwendbare Szenarien

  • InnoDB: Wird für Transaktionsverarbeitungsanwendungen verwendet und unterstützt Fremdschlüssel und Sperren auf Zeilenebene. Wenn die Anwendung relativ hohe Anforderungen an die Integrität der Dinge stellt und unter gleichzeitigen Bedingungen Datenkonsistenz erfordert und Datenoperationen neben Einfügungen und Abfragen auch viele Aktualisierungs- und Löschvorgänge umfassen, ist die InnoDB-Speicher-Engine besser geeignet.
    Neben der wirksamen Reduzierung von durch Löschungen und Aktualisierungen verursachten Sperren kann InnoDB auch die vollständige Übermittlung und das Rollback von Transaktionen sicherstellen. Es ist eine geeignete Wahl für Systeme wie Abrechnungssysteme oder Finanzsysteme, die hohe Anforderungen an die Datengenauigkeit stellen.

  • MyISAM: Wenn die Anwendung hauptsächlich auf Lese- und Einfügevorgängen mit nur wenigen Aktualisierungs- und Löschvorgängen basiert und keine hohen Anforderungen an Transaktionsintegrität und Parallelität stellt, können Sie diese Speicher-Engine wählen.

  • Speicher: Speichert alle Daten im Speicher und ermöglicht so einen extrem schnellen Zugriff in Umgebungen, in denen Datensätze und ähnliche Daten schnell gefunden werden müssen.
    Der Nachteil des Speichers besteht darin, dass die Größe der Tabelle begrenzt ist, wenn die Datenbank abnormal beendet wird. Sobald die Datenbank geschlossen wird, gehen die im Speicher gespeicherten Daten verloren.

Zu den von MySQL unterstützten Speicher-Engines gehören InnoDB, MyISAM, MEMORY, CSV, BLACKHOLE, NDB, FEDERATED, MRG_MYISAM, ARCHIVE, PERFORMANCE_SCHEMA.
Unter diesen stellen NDB und InnoDB transaktionssichere Tabellen bereit, und andere Speicher-Engines sind nicht transaktionssichere Tabellen.

2. Die Verwendung der Speicher-Engine in MySQL

# 查看当前的默认存储引擎:
mysql> show variables like "default_storage_engine";

# 查询当前数据库支持的存储引擎
mysql> show engines \G;
1. Geben Sie die Speicher-Engine in der Konfigurationsdatei an
mysql> create table ai(id bigint(12),name varchar(200)) ENGINE=MyISAM; 
mysql> create table country(id int(4),cname varchar(50)) ENGINE=InnoDB;

# 也可以使用alter table语句,修改一个已经存在的表的存储引擎。
mysql> alter table ai engine = innodb;
1 die Tabellenstruktur

Es gibt zwei Möglichkeiten, die Tabellenstruktur anzuzeigen:

desc[Tabellenname] und beschreiben [Tabellenname]: Diese beiden Methoden haben den gleichen Effekt und können die aktuelle Tabellenstruktur anzeigen.

  • Erstellungstabelle [Tabellenname] anzeigen: Zusätzlich zur Tabellendefinition können Sie auch Informationen wie Engine (Speicher-Engine) und Zeichensatz (Zeichensatz) anzeigen. Verwenden Sie die Option G, um Datensätze vertikal anzuordnen und so die Anzeige längerer Datensätze zu erleichtern. )

  • Beispiel:

    # my.ini文件
    [mysqld]
    default-storage-engine=INNODB
  • 2. Automatische Wachstumsspalte

Das eingeschränkte Feld muss gleichzeitig durch den Schlüsselprimärschlüssel eingeschränkt werden

mysql> desc staff_info;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| phone | bigint(11)            | YES  |     | NULL    |       |
| job   | varchar(11)           | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
rows in set (0.00 sec)

mysql> show create table staff_info\G;
*************************** 1. row ***************************
       Table: staff_info
Create Table: CREATE TABLE `staff_info` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  `sex` enum('male','female') DEFAULT NULL,
  `phone` bigint(11) DEFAULT NULL,
  `job` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.01 sec)

ERROR: 
No query specified

4

1. ENUM und SET Der chinesische Name des Typs

ENUM wird als Aufzählungstyp bezeichnet und sein Wertebereich muss beim Erstellen einer Tabelle durch Aufzählung angezeigt werden. Mit

ENUM können Sie nur einen einzelnen Wert aus einer Wertesammlung auswählen, nicht mehrere Werte gleichzeitig. Zweck: Einzelauswahl: Geschlecht auswählen

  • ENUM:

    Für die Aufzählung von 1-255 Mitgliedern ist 1 Byte Speicherplatz erforderlich.
  • Für 255-65535 Mitglieder sind 2 Byte Speicherplatz erforderlich.
Maximal zulässig sind 65535 Mitglieder.




SET ist ENUM sehr ähnlich. Es ist ebenfalls ein String-Objekt und kann 0-64 Mitglieder enthalten. Der Speicherplatz variiert je nach Mitglied.

Mit dem Set-Typ können Sie ein oder mehrere Elemente aus dem Werteset beliebig zur Kombination auswählen. Für Inhalte, die außerhalb des zulässigen Bereichs liegen, ist die Injektion nicht zulässig und doppelte Werte werden automatisch dedupliziert. Verwendung: Multiple Choice: Hobbys und Geschlecht

    SET: 
    1-8个成员的集合,占1个字节 
    9-16个成员的集合,占2个字节 
    17-24个成员的集合,占3个字节 
    25-32个成员的集合,占4个字节 
    33-64个成员的集合,占8个字节

    2、set/enum示例

    mysql> create table t10 (name char(20),gender enum('female','male') );
    Query OK, 0 rows affected (0.01 sec)
    
    -- 选择enum('female','male')中的一项作为gender的值,可以正常插入
    mysql> insert into t10 values ('nick','male');
    Query OK, 1 row affected (0.00 sec)
    
    -- 不能同时插入'male,female'两个值,也不能插入不属于'male,female'的值
    mysql> insert into t10 values ('nick','male,female');
    ERROR 1265 (01000): Data truncated for column 'gender' at row 1
    
    mysql> create table t11 (name char(20),hobby set('抽烟','喝酒','烫头','翻车') );
    Query OK, 0 rows affected (0.01 sec)
    
    -- 可以任意选择set('抽烟','喝酒','烫头','翻车')中的项,并自带去重功能
    mysql> insert into t11 values ('tank','烫头,喝酒,烫头');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from t11;
    +------+---------------+
    | name | hobby        |
    +------+---------------+
    | tank | 喝酒,烫头     |
    +------+---------------+
    row in set (0.00 sec)
    
    -- 不能选择不属于set('抽烟','喝酒','烫头','翻车')中的项,
    mysql> insert into t11 values ('jason','烫头,翻车,看妹子');
    ERROR 1265 (01000): Data truncated for column 'hobby' at row 1

    五、MySQL表查询

    1、限制查询的记录数(limit)

    示例:

    SELECT * FROM employee ORDER BY salary DESC 
        LIMIT 3;    --默认初始位置为0 
    
    SELECT * FROM employee ORDER BY salary DESC
        LIMIT 0 , 5 ; --从第0开始,即先出第一条,然后包含这一条在内往后查5条
    
    SELECT * FROM employee ORDER BY salary DESC
        LIMIT 5 , 5 ; --从第5开始,即先出第6条,然后包含这一条在内往后查5条

    2、使用正则表达式查询

    小结:对字符串匹配的方式

    • WHERE emp_name = 'nick';

    • WHERE emp_name LIKE 'sea%';

    • WHERE emp_name REGEXP 'on$';

    SELECT * FROM employee WHERE emp_name REGEXP '^jas';
    SELECT * FROM employee WHERE emp_name REGEXP 'on$';
    SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';

    六、数据备份(命令行)

    1、 数据库的逻辑备份

    --语法:
    mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
    
    --示例:
    --单库备份
    mysqldump -uroot –p123  mysql > c:\db1.sql
    mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql
    
    --多库备份
    mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
    
    --备份所有库
    mysqldump -uroot -p123 --all-databases > all.sql

    2、 数据恢复

    --方法一:
    [root@nick backup]-- mysql -uroot -p123 < /backup/all.sql
    
    --方法二:
    mysql> use db1;
    mysql> SET SQL_LOG_BIN=0;   --关闭二进制日志,只对当前session生效
    mysql> source /root/db1.sql

    七、事务和锁(SQL)

    begin;  -- 开启事务
       select * from emp where id = 1 for update;  -- 查询id值,for update添加行锁;
        update emp set salary=10000 where id = 1; -- 完成更新
    commit; -- 提交事务

    八、执行计划Explain

    执行计划:让mysql预估执行操作(一般正确)

    Explain语法:

    explain select &hellip; from &hellip; [where &hellip;]

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。

    具体用法和字段含义可以参考官网explain-output ,这里需要强调rows是核心指标,绝大部分rows小的语句执行一定很快(rows:显示MySQL认为它执行查询时必须检查的行数。)。所以优化语句基本上都是在优化rows。

    例如:

    explain select * from news;

    输出:

    +--+-----------+-----+----+-------------+---+-------+---+----+-----+ 
    |id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra| 
    +--+-----------+-----+----+-------------+---+-------+---+----+----—+

    Das obige ist der detaillierte Inhalt vonAnalyse grundlegender Betriebsbeispiele der MySQL-Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen