🐬 MySQL & MariaDB
The pair that still runs most of the web — InnoDB, sql_mode and the type traps that quietly change your data, indexes and EXPLAIN, then a closing series on exactly where MariaDB and MySQL have diverged since the fork.
No lessons published yet — this is the roadmap, so you can see exactly what the course will cover before it lands.
Before you start: Learn SQL — Series 1 and Series 2. You need to be able to write joins and aggregates before this is useful. The subject here is not how to query — it is what this engine does with your query and your data that another one would not.
Short on time? The 15 episodes marked core are the shortest path to being productive at work. Start there and pick up the rest whenever a job asks for them.
Series 1 · MySQL Essentials
the client, the settings, and the types that change your data
- 01
The mysql Client — SHOW CREATE TABLE and Reading What You Actually Have
coreintermediatecoming soon - 02
sql_mode — Whether This Database Tells You It Changed Your Data
coreintermediatecoming soon - 03
utf8mb4 and Collations — Why utf8 Is Not UTF-8, and Why That JOIN Is Slow
coreintermediatecoming soon - 04
Types and Implicit Conversion — DATETIME vs TIMESTAMP, and Comparisons That Lie
coreintermediatecoming soon - 05
Storage Engines — InnoDB, and the MyISAM Tables You Will Inherit
coreintermediatecoming soon - 06
AUTO_INCREMENT and ON DUPLICATE KEY UPDATE — Writes, Gaps and REPLACE's Trap
coreintermediatecoming soon - 07
mysqldump, XtraBackup and the Binary Log — and the Flags That Decide If It Restores
coreintermediatecoming soon - 08
Project — Audit an Inherited Schema and Fix What It Is Silently Doing
coreintermediate#projectcoming soon
Series 2 · Indexes and the Optimizer
the clustered primary key, and reading an EXPLAIN
- 01
The Clustered Primary Key — Why Your Choice of PK Changes Every Index
coreadvancedcoming soon - 02
EXPLAIN — type, key, rows, and the Two Words in Extra That Matter
coreadvancedcoming soon - 03
Composite and Covering Indexes — The Leftmost Prefix Rule
coreadvancedcoming soon - 04
The Optimizer — Statistics, Histograms and When a Full Scan Is Right
advancedcoming soon - 05
Finding the Slow Query — The Slow Log, performance_schema and sys
advancedcoming soon - 06
Project — Index a Real Workload, and Prove Each Index Earns Its Place
coreadvanced#projectcoming soon
Series 3 · Beyond Queries
JSON, generated columns and code in the database
- 01
The JSON Type — JSON_TABLE, and Indexing a Document Through a Generated Column
advancedcoming soon - 02
Generated Columns and CHECK Constraints — Including the Ones That Did Nothing
advancedcoming soon - 03
Stored Routines, Triggers and Events — Code in the Database, and Its Costs
advancedcoming soon - 04
CTEs and Window Functions in 8.0 — and the Workarounds They Replace
advancedcoming soon - 05
FULLTEXT Search — MATCH AGAINST, Boolean Mode, and Where It Runs Out
advancedcoming soon
Series 4 · Where MariaDB Differs
the same roots, and the places they have grown apart
- 01
The Fork — What 'Drop-In Replacement' Used to Mean, and What It Means Now
coreadvancedcoming soon - 02
JSON — A Native Binary Type on One, LONGTEXT With a CHECK on the Other
coreadvancedcoming soon - 03
Sequences and System-Versioned Tables — What Only MariaDB Has
advancedcoming soon - 04
ColumnStore and Galera — The Engines MySQL Does Not Have
advancedcoming soon - 05
Writing SQL That Behaves the Same on Both — and Testing a Migration
coreadvanced#projectcoming soon
Not here, on purpose
- SQL itself — SELECT, JOIN, GROUP BY, CTEs and window functions — covered in Learn SQL. Here the question is what MySQL does differently, including which versions have them at all
- Running the server — replication topology, failover, my.cnf tuning — covered in Data Ops, Series 2 for the discipline — that series runs PostgreSQL, so the habits transfer and the commands do not. In this course, Series 1 · 27 teaches mysqldump, XtraBackup and the binary log
- Deciding what the tables and keys should be — covered in Data Modeling. Here the schema exists and the question is which MySQL type and index to give it
- Loading data in from other systems — covered in ETL & Data Pipelines