← All courses

🐬 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

  1. 01

    The mysql Client — SHOW CREATE TABLE and Reading What You Actually Have

    coreintermediatecoming soon
  2. 02

    sql_mode — Whether This Database Tells You It Changed Your Data

    coreintermediatecoming soon
  3. 03

    utf8mb4 and Collations — Why utf8 Is Not UTF-8, and Why That JOIN Is Slow

    coreintermediatecoming soon
  4. 04

    Types and Implicit Conversion — DATETIME vs TIMESTAMP, and Comparisons That Lie

    coreintermediatecoming soon
  5. 05

    Storage Engines — InnoDB, and the MyISAM Tables You Will Inherit

    coreintermediatecoming soon
  6. 06

    AUTO_INCREMENT and ON DUPLICATE KEY UPDATE — Writes, Gaps and REPLACE's Trap

    coreintermediatecoming soon
  7. 07

    mysqldump, XtraBackup and the Binary Log — and the Flags That Decide If It Restores

    coreintermediatecoming soon
  8. 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

  1. 01

    The Clustered Primary Key — Why Your Choice of PK Changes Every Index

    coreadvancedcoming soon
  2. 02

    EXPLAIN — type, key, rows, and the Two Words in Extra That Matter

    coreadvancedcoming soon
  3. 03

    Composite and Covering Indexes — The Leftmost Prefix Rule

    coreadvancedcoming soon
  4. 04

    The Optimizer — Statistics, Histograms and When a Full Scan Is Right

    advancedcoming soon
  5. 05

    Finding the Slow Query — The Slow Log, performance_schema and sys

    advancedcoming soon
  6. 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

  1. 01

    The JSON Type — JSON_TABLE, and Indexing a Document Through a Generated Column

    advancedcoming soon
  2. 02

    Generated Columns and CHECK Constraints — Including the Ones That Did Nothing

    advancedcoming soon
  3. 03

    Stored Routines, Triggers and Events — Code in the Database, and Its Costs

    advancedcoming soon
  4. 04

    CTEs and Window Functions in 8.0 — and the Workarounds They Replace

    advancedcoming soon
  5. 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

  1. 01

    The Fork — What 'Drop-In Replacement' Used to Mean, and What It Means Now

    coreadvancedcoming soon
  2. 02

    JSON — A Native Binary Type on One, LONGTEXT With a CHECK on the Other

    coreadvancedcoming soon
  3. 03

    Sequences and System-Versioned Tables — What Only MariaDB Has

    advancedcoming soon
  4. 04

    ColumnStore and Galera — The Engines MySQL Does Not Have

    advancedcoming soon
  5. 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