本章目标:掌握数据库和数据表的定义语言(DDL),能独立完成建库、建表、改表、删表以及约束设计。
DDL(Data Definition Language)用于定义和管理数据库结构,不是改数据内容。
CREATE、ALTER、DROP、TRUNCATEgraph LR
A[需求分析] --> B[设计库和表]
B --> C[编写DDL]
C --> D[执行建库建表]
D --> E[应用接入]
E --> F[结构迭代 ALTER]
CREATE DATABASE IF NOT EXISTS blog_db
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;SHOW DATABASES;USE blog_db;DROP DATABASE IF EXISTS blog_db;生产环境慎用
DROP DATABASE,建议先做备份。
CREATE TABLE IF NOT EXISTS users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
status TINYINT NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;DESC users;
SHOW CREATE TABLE users;DROP TABLE IF EXISTS users;TRUNCATE TABLE users;
TRUNCATE是重建表,速度快,但会重置自增 ID。
ALTER TABLE users
ADD COLUMN phone VARCHAR(20) DEFAULT NULL;ALTER TABLE users
MODIFY COLUMN phone VARCHAR(30) NOT NULL;ALTER TABLE users
CHANGE COLUMN phone mobile_phone VARCHAR(30) NOT NULL;ALTER TABLE users
DROP COLUMN mobile_phone;ALTER TABLE users RENAME TO app_users;CREATE TABLE categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL UNIQUE
);CREATE TABLE posts (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(120) NOT NULL,
category_id INT NOT NULL,
CONSTRAINT fk_posts_category
FOREIGN KEY (category_id)
REFERENCES categories(id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);CREATE TABLE authors (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
nickname VARCHAR(50) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE articles (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
author_id BIGINT NOT NULL,
title VARCHAR(150) NOT NULL,
content TEXT,
published_at DATETIME DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_articles_author
FOREIGN KEY (author_id) REFERENCES authors(id)
ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE TABLE article_tags (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
article_id BIGINT NOT NULL,
tag_name VARCHAR(30) NOT NULL,
CONSTRAINT fk_article_tags_article
FOREIGN KEY (article_id) REFERENCES articles(id)
ON DELETE CASCADE ON UPDATE CASCADE
);FLOAT/DOUBLE,导致精度问题created_at、updated_atALTER TABLE 是日常高频操作,建议先小步演练再上线。shop_db,字符集为 utf8mb4。products 表,至少包含主键、名称、价格、库存、创建时间。products 表新增 status 字段,默认值为 1。orders 与 products 的外键关系,并写出建表 SQL。