目录
- 一、DDL:数据定义语言
 - 
- [1. 数据库 (Database) 操作](#1. 数据库 (Database) 操作)
 - 
- 创建数据库 (CREATE DATABASE)
 - 修改数据库 (ALTER DATABASE)
 - [删除数据库 (DROP DATABASE) 谨慎使用](#删除数据库 (DROP DATABASE) 谨慎使用)
 - 选择/使用数据库 (USE)
 
 - [2. 表 (Table) 操作](#2. 表 (Table) 操作)
 - [3. 索引 (Index) 操作](#3. 索引 (Index) 操作)
 - [4. 视图 (View) 操作](#4. 视图 (View) 操作)
 
 
一、DDL:数据定义语言
核心概念:DDL 语句用于定义或修改数据库的结构(Schema),而不是其中的数据。执行 DDL 语句通常会自动提交当前事务(即立即生效)。
1. 数据库 (Database) 操作
创建数据库 (CREATE DATABASE)
            
            
              sql
              
              
            
          
          -- 最基本语法
CREATE DATABASE mydb;
-- 指定字符集和排序规则(推荐,避免乱码)
CREATE DATABASE mydb 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_bin;
        **CHARACTER SET:**指定数据库默认的字符编码。utf8mb4 是现在的主流选择,因为它支持完整的 Unicode(包括表情符号)。
**COLLATE:**指定字符串比较和排序的规则。utf8mb4_bin 是基于 Unicode 标准的排序规则,比较准确。
修改数据库 (ALTER DATABASE)
            
            
              sql
              
              
            
          
          -- 修改数据库的默认字符集和排序规则
ALTER DATABASE mydb 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;
        主要用于修改数据库的全局属性,如字符集。注意: 修改不会影响已存在的表,只会影响后续新创建的表。

删除数据库 (DROP DATABASE) 谨慎使用
            
            
              sql
              
              
            
          
          -- 删除数据库(谨慎使用!该操作会删除库中所有数据和表)
DROP DATABASE mydb;
-- 先判断数据库是否存在,再删除(更安全)
DROP DATABASE IF EXISTS mydb;
        **警告:**此操作不可逆,会直接删除整个数据库及其所有对象。
选择/使用数据库 (USE)
            
            
              sql
              
              
            
          
          -- 选择要操作的数据库
USE mydb;
        2. 表 (Table) 操作
创建表 (CREATE TABLE)
            
            
              sql
              
              
            
          
          -- 基本语法
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,       -- 主键,自增长
    username VARCHAR(50) NOT NULL UNIQUE,    -- 可变长字符串,非空且唯一
    password CHAR(60) NOT NULL,              -- 固定长度字符串(常用于加密后的密码)
    email VARCHAR(100),
    age TINYINT UNSIGNED,                    -- 无符号小整数
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 默认值为当前时间
    is_active BOOLEAN DEFAULT TRUE           -- 布尔类型,实际上是TINYINT(1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;     -- 指定存储引擎和字符集
        
修改表 (ALTER TABLE)
            
            
              sql
              
              
            
          
          添加列 (ADD COLUMN)
alter table users add column sex char(1) after is_active; -- 指定新列的位置
        
            
            
              sql
              
              
            
          
          修改列定义 (MODIFY COLUMN)
alter table users modify column sex char(20); -- 增大邮箱字段的长度
        
            
            
              sql
              
              
            
          
          重命名列 (CHANGE COLUMN)
ALTER TABLE users 
CHANGE COLUMN is_active status BOOLEAN DEFAULT TRUE; -- 修改列名和定义
        
            
            
              sql
              
              
            
          
          删除列 (DROP COLUMN)
ALTER TABLE users 
DROP COLUMN age;
添加约束 (ADD CONSTRAINT)
-- 添加外键约束
ALTER TABLE orders 
ADD CONSTRAINT fk_orders_user_id 
FOREIGN KEY (user_id) REFERENCES users(id);
-- 添加唯一约束
ALTER TABLE users 
ADD CONSTRAINT uk_users_email UNIQUE (email);
添加/删除索引
ALTER TABLE users ADD INDEX idx_username (username); -- 添加普通索引
ALTER TABLE users DROP INDEX idx_username;       
        3. 索引 (Index) 操作
创建索引 (CREATE INDEX)
            
            
              sql
              
              
            
          
          -- 在现有表上创建索引
CREATE INDEX idx_email ON users(email);         -- 普通索引
CREATE UNIQUE INDEX uk_username ON users(username); -- 唯一索引
        删除索引 (DROP INDEX)
            
            
              sql
              
              
            
          
          -- 删除索引
DROP INDEX idx_email ON users;
        4. 视图 (View) 操作
视图是将数据库中查询得到的数据作为一张新的表,用来操作,虚拟表。
视图是一个虚拟表,其内容由查询定义。
创建视图 (CREATE VIEW)
            
            
              sql
              
              
            
          
          -- 创建一个视图,隐藏了密码等敏感信息
CREATE VIEW user_profile AS
SELECT id, username, email, created_at, status
FROM users;
        查看视图 (CREATE VIEW)
            
            
              sql
              
              
            
          
          SHOW FULL TABLES WHERE Table_type = 'VIEW';
        修改视图 (ALTER VIEW)
            
            
              sql
              
              
            
          
          -- 修改视图定义
ALTER VIEW user_profile AS
SELECT id, username, email, created_at, status, phone_number
FROM users;
        删除视图 (DROP VIEW)
            
            
              sql
              
              
            
          
          DROP VIEW IF EXISTS user_profile;