当前位置: 首页 > article >正文

【MySQL速成指南】数据库定义语言(DDL)详解:从建库到改表!

一、DDL是什么?

数据库定义语言(Data Definition Language, DDL) 是用于定义和管理数据库结构的语言,是构建数据世界的基石。本文深入讲解SQL中DDL的核心语法与应用场景,涵盖数据库、表、索引等对象的创建、修改和删除操作。

二、数据库级操作

1. 创建数据库

-- 创建名为school的数据库
-- CHARACTER SET指定字符集为utf8mb4(支持4字节Unicode字符)
-- COLLATE设置排序规则为unicode不区分大小写格式
CREATE DATABASE school 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

-- 防止重复创建
CREATE DATABASE IF NOT EXISTS school;

2. 修改数据库

-- 修改数据库字符集为utf8
-- 注意:已有数据不会自动转换字符编码
ALTER DATABASE school 
CHARACTER SET = utf8;

 3. 删除数据库(谨慎,危险操作!)

-- 安全删除数据库:先检查是否存在再删除
-- 生产环境慎用,建议提前备份重要数据
DROP DATABASE IF EXISTS old_db;

三、数据表操作

1. 创建表

-- 创建学生表包含自增主键和外键约束
-- AUTO_INCREMENT:MySQL的自增列语法
-- CONSTRAINT:显示命名外键约束(便于后续管理)
CREATE TABLE students (
    student_id INT PRIMARY KEY AUTO_INCREMENT, -- 设置主键与自增
    name VARCHAR(50) NOT NULL,               -- 非空姓名列
    birth_date DATE,                          -- 日期类型存储生日
    class_id INT,                             -- 班级ID(外键字段)
    CONSTRAINT fk_class                       -- 外键约束命名
    FOREIGN KEY (class_id) REFERENCES classes(class_id) -- 关联班级表
);

2. 修改表结构

-- 新增email字段,长度100允许NULL值
ALTER TABLE students 
ADD email VARCHAR(100);

-- 修改name字段类型为VARCHAR(80)
-- 注意:已有数据长度超过80会导致修改失败
ALTER TABLE students 
MODIFY COLUMN name VARCHAR(80);

-- 删除birth_date字段
-- 警告:该操作会永久删除列及其数据
ALTER TABLE students 
DROP COLUMN birth_date;

-- 重命名表(MySQL语法)
ALTER TABLE students 
RENAME TO pupils;

-- 添加默认值
ALTER TABLE employees 
ALTER COLUMN hire_date 
SET DEFAULT '2024-01-01';

-- 删除默认值
ALTER TABLE orders 
ALTER COLUMN order_date 
DROP DEFAULT;

-- MySQL重命名列(同时可修改类型)
ALTER TABLE students 
CHANGE COLUMN birth_date birth_year INT; -- 将日期列改为年份整数

-- 将phone列调整到email列之后(MySQL语法)
ALTER TABLE customers 
MODIFY phone VARCHAR(20) AFTER email;

四、‘用户’ 操作与权限管理

1. 创建用户

CREATE USER '用户名'@'主机名' 
IDENTIFIED BY '密码';

 示例:

-- 创建本地用户
CREATE USER 'admin'@'localhost' 
IDENTIFIED BY 'Admin123!';

-- 创建远程用户(允许任意主机访问)
CREATE USER 'remote_user'@'%' 
IDENTIFIED BY 'Remote123!';

 2. 修改用户

-- 修改用户名
RENAME USER '旧用户名'@'主机名' 
TO '新用户名'@'主机名';


--修改密码
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');    -- MySQL 5.7+

ALTER USER '用户名'@'主机名'     -- MySQL 8.0+
IDENTIFIED BY '新密码';

3. 删除用户

DROP USER [IF EXISTS] '用户名'@'主机名';

 4. 权限管理

-- 授予权限
GRANT 权限列表 
ON 数据库名.表名 
TO '用户名'@'主机名' 
[WITH GRANT OPTION];

-- 回收权限
REVOKE 权限列表 
ON 数据库名.表名 
FROM '用户名'@'主机名';

示例:

-- 授予SELECT和INSERT权限
GRANT SELECT, INSERT 
ON school_db.* 
TO 'admin'@'localhost';

-- 授予所有权限并允许授权他人
GRANT ALL PRIVILEGES 
ON school_db.* 
TO 'super_admin'@'%' 
WITH GRANT OPTION;

-- 回收DELETE权限
REVOKE DELETE 
ON school_db.tb_student 
FROM 'admin'@'localhost';

五、约束管理

1. 主键约束

-- 为已有表添加主键约束
-- 主键字段必须包含唯一且非空的值
ALTER TABLE orders 
ADD PRIMARY KEY (order_id);

2. 外键约束

-- 添加级联删除外键约束
-- ON DELETE CASCADE:主表删除记录时自动删除子表关联记录
ALTER TABLE order_items 
ADD CONSTRAINT fk_order 
FOREIGN KEY (order_id) 
REFERENCES orders(order_id)
ON DELETE CASCADE;

3. 唯一约束

-- 确保邮箱地址在表中唯一
-- 允许NULL值(不同数据库实现可能不同)
ALTER TABLE employees 
ADD UNIQUE (employee_email);

六、索引管理

1. 创建索引

-- 为客户的姓氏创建普通索引
-- 适用于WHERE lastName='xxx'的查询优化
CREATE INDEX idx_name 
ON customers(last_name);

-- 创建联合索引(最左前缀原则)
-- 优化同时使用last_name和email的查询
CREATE INDEX idx_name_email 
ON users(last_name, email);

-- 创建唯一索引(强制电话号码唯一)
-- 与唯一约束的区别:索引侧重查询优化,约束侧重数据完整性
CREATE UNIQUE INDEX uidx_phone 
ON contacts(phone_number);

2. 删除索引

-- 删除指定表的索引
DROP INDEX idx_name ON customers;

七、视图管理

1. 创建视图

-- 创建活跃用户视图
-- 视图不存储实际数据,每次访问动态查询
CREATE VIEW active_users AS
SELECT user_id, username, email 
FROM users 
WHERE is_active = 1; -- 筛选状态为激活的用户

2. 修改视图

-- 更新视图定义:增加注册时间筛选条件
-- 注意:部分数据库不支持ALTER VIEW(需重建视图)
ALTER VIEW active_users AS
SELECT user_id, username, registration_date 
FROM users 
WHERE last_login > '2023-01-01'; -- 筛选2023年后登录的用户

3. 删除视图

-- 安全删除视图:存在才执行删除
DROP VIEW IF EXISTS inactive_users;

# 希望这篇总结有助于大家!如果觉得有用,点赞⭐收藏🌟关注👀 三连支持吧!


http://www.kler.cn/a/594872.html

相关文章:

  • c++简单实现redis
  • 华为参访预约,团队考察体验黑科技之旅
  • PostgreSQL 存储过程
  • 如何在云端平台上建立 30,000 名用户的网页 MMO游戏环境-2 (服务器)
  • 基于javaweb的SpringBoot成绩管理系统设计与实现(源码+文档+部署讲解)
  • 大数据学习(77)-Hive详解
  • C#/.NET/.NET Core技术前沿周刊 | 第 30 期(2025年3.10-3.16)
  • 实时监控、数据分析!Web-Check构建你的网站健康检测系统实操方案
  • 如何将外网 Git 仓库完整迁移到本地仓库并保留提交历史(附原理详解)
  • 群体智能优化算法-斑马优化算法 (Zebra Optimization Algorithm, ZOA,含Matlab源代码)
  • 嵌入式硬件篇---WIFI模块
  • 汇编代码中嵌入回调函数的优化说明
  • ZMC600E,多核异构如何成就机器人精准控制?
  • 【数学建模】模糊综合评价模型详解、模糊集合论简介
  • 10-- 网络攻击防御原理全景解析 | 从单包攻防到DDoS军团作战(包你看一遍全记住)
  • DeDeCMS靶场
  • Github 2025-03-20 Go开源项目日报Top10
  • 【RHCE实验】搭建主从DNS、WEB等服务器
  • 快速入手-基于Django的mysql配置(三)
  • Spark 中的Shuffle过程