Skip to content

MySQL Complete Tutorial

Overview

Tutorial Features

  • Progressive - From basic to advanced
  • Bilingual - English and Chinese side-by-side
  • Practical - Runnable examples
  • Useful - Real-world scenarios
  • Complete - Covers 35+ core topics

Tutorial Structure

Part 1: Basics

Part 2: Core Operations

Part 3: Advanced Topics

Part 4: Data Operations

Quick Start

Install MySQL

bash
# Windows: Download from dev.mysql.com
# macOS: brew install mysql
brew install mysql@8.0

# Linux (Ubuntu/Debian)
sudo apt update
sudo apt install mysql-server

# Start MySQL service
sudo systemctl start mysql

Connect to MySQL

bash
mysql -u root -p

CREATE DATABASE myapp;
USE myapp;

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (name, email) VALUES 
    ('John Doe', 'john@example.com'),
    ('Jane Smith', 'jane@example.com');

SELECT * FROM users;
sql
SHOW DATABASES;

CREATE DATABASE database_name;

USE database_name;

DROP DATABASE database_name;

Common Commands

sql
SHOW TABLES;

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    PRIMARY KEY (column1)
);

DESCRIBE table_name;

DROP TABLE table_name;

CRUD

sql
-- Create (Insert)
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');

-- Read (Select)
SELECT * FROM users;

-- Update
UPDATE users SET name = 'Jane Smith' WHERE name = 'John Doe';

-- Delete
DELETE FROM users WHERE name = 'Jane Smith';

|------|------|------|------| | TINYINT | 1 byte | -128 to 127 | | | INT | 4 bytes | -2147483648 to 2147483647 | | | BIGINT | 8 bytes | -9.2e+18 to 9.2e+18 | |

|------|----------|----------| | TEXT | 65535 | | | MEDIUMTEXT | 16777215 | | | LONGTEXT | 4294967295 | |

|------|------|------|------| | DATE | 3 bytes | 1000-01-01 to 9999-12-31 | | | TIME | 3 bytes | -838:59:59 to 838:59:59 | | | TIMESTAMP | 4 bytes | 1970-01-01 00:00:01 to 2038-01-19:03:14:07:19:03:14:07 | | | YEAR | 1 byte | 1901 to 2155 | |

  1. UPDATEDELETE
  2. UNION
  3. NULL
sql
CREATE TABLE user_accounts;     -- Recommended
CREATE TABLE UserAccounts;   -- Avoid

CREATE TABLE users;          -- Common practice
sql
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'app_user'@'localhost';

-- Prevent SQL injection
PREPARE stmt FROM 'SELECT * FROM users WHERE id = ?';
SET @id = 1;
EXECUTE stmt USING @id;
sql
CREATE INDEX idx_users_email ON users(email);

-- Use EXPLAIN to analyze queries
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

-- Avoid SELECT *
SELECT id, name, email FROM users;

Content is for learning and research only.