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

数据库中的 DDL(Data Definition Language,数据定义语言) 用于定义或修改数据库结构(如库、表、索引、约束等)。

数据库中的 DDL(Data Definition Language,数据定义语言) 用于定义或修改数据库结构(如库、表、索引、约束等)。以下是核心 DDL 操作指令及语法详解,适用于主流数据库(MySQL、PostgreSQL、SQL Server、Oracle 等):


一、数据库(Database)操作

1. 创建数据库
CREATE DATABASE [IF NOT EXISTS] database_name 
[CHARACTER SET charset_name]  -- MySQL 字符集
[COLLATE collation_name];     -- 排序规则

示例

CREATE DATABASE IF NOT EXISTS company 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;
2. 删除数据库
DROP DATABASE [IF EXISTS] database_name;

示例

DROP DATABASE IF EXISTS old_company;
3. 修改数据库(部分数据库支持)
-- MySQL 修改字符集
ALTER DATABASE company CHARACTER SET utf8;-- SQL Server 修改数据库名
ALTER DATABASE old_name MODIFY NAME = new_name;

二、表(Table)操作

1. 创建表
CREATE TABLE [IF NOT EXISTS] table_name (column1 datatype [constraints],column2 datatype [constraints],...[table_constraints]
);

常用数据类型

  • 整数:INT, BIGINT, SMALLINT
  • 小数:DECIMAL(p,s), FLOAT, DOUBLE
  • 字符串:VARCHAR(n), CHAR(n), TEXT
  • 日期:DATE, DATETIME, TIMESTAMP
  • 布尔:BOOLEAN(或 TINYINT(1)

示例

CREATE TABLE employees (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,salary DECIMAL(10,2) DEFAULT 0,hire_date DATE,department_id INT,FOREIGN KEY (department_id) REFERENCES departments(id)
);
2. 删除表
DROP TABLE [IF EXISTS] table_name [CASCADE | RESTRICT];
  • CASCADE:级联删除依赖对象(如视图)
  • RESTRICT:默认,有依赖则拒绝删除
3. 修改表结构
操作类型语法示例
添加列ALTER TABLE table_name ADD COLUMN new_column datatype [constraints];
删除列ALTER TABLE table_name DROP COLUMN column_name;
修改列类型ALTER TABLE table_name ALTER COLUMN column_name TYPE new_datatype;
重命名列ALTER TABLE table_name RENAME COLUMN old_name TO new_name;
添加约束ALTER TABLE table_name ADD CONSTRAINT constraint_name ...;
删除约束ALTER TABLE table_name DROP CONSTRAINT constraint_name;

示例

-- 添加邮箱列
ALTER TABLE employees ADD COLUMN email VARCHAR(100);-- 修改薪资列类型
ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(12,2); -- 添加唯一约束
ALTER TABLE employees ADD CONSTRAINT uk_email UNIQUE (email);

三、约束(Constraints)

约束类型语法示例
主键CREATE TABLE ... (id INT PRIMARY KEY)
外键FOREIGN KEY (dept_id) REFERENCES departments(id)
唯一键email VARCHAR(100) UNIQUE
非空name VARCHAR(50) NOT NULL
检查约束salary DECIMAL CHECK (salary > 0)
默认值create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP

四、索引(Index)操作

1. 创建索引
CREATE [UNIQUE] INDEX index_name 
ON table_name (column1 [ASC|DESC], column2, ...);

示例

-- 单列索引
CREATE INDEX idx_employee_name ON employees(name);-- 唯一复合索引
CREATE UNIQUE INDEX idx_unique_email ON employees(email, department_id);
2. 删除索引
DROP INDEX index_name ON table_name;  -- MySQL
DROP INDEX table_name.index_name;     -- SQL Server

五、视图(View)操作

1. 创建视图
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

示例

CREATE VIEW active_employees AS
SELECT id, name, department 
FROM employees 
WHERE status = 'active';
2. 修改视图
ALTER VIEW view_name AS 
SELECT ...;  -- 重新定义查询
3. 删除视图
DROP VIEW [IF EXISTS] view_name;

六、序列(Sequence)操作(Oracle/PostgreSQL)

1. 创建序列
CREATE SEQUENCE seq_name
[START WITH start]
[INCREMENT BY increment]
[MAXVALUE max_value | NOMAXVALUE]
[MINVALUE min_value | NOMINVALUE]
[CYCLE | NOCYCLE];
2. 使用序列
-- 插入数据时调用
INSERT INTO employees (id) VALUES (seq_name.NEXTVAL);

关键注意事项

  1. DDL 自动提交
    执行 DDL 语句(如 CREATE, ALTER, DROP)后事务立即提交,无法回滚(Oracle 部分操作可回滚)。

  2. 锁表风险
    ALTER TABLE 可能锁表导致业务阻塞,大表操作需谨慎。

  3. 数据库兼容性

    • MySQL 不支持修改列名(需用 CHANGE 替代):
      ALTER TABLE employees CHANGE old_name new_name VARCHAR(50);
      
    • SQL Server 使用 NVARCHAR 替代 VARCHAR 支持 Unicode
  4. 命名规范
    避免使用保留字(如 order, user),建议统一大小写和下划线命名(employee_id)。

  5. 备份优先
    执行破坏性操作(DROP, TRUNCATE)前务必备份数据


综合示例

-- 创建带约束的表
CREATE TABLE departments (dept_id INT PRIMARY KEY AUTO_INCREMENT,dept_name VARCHAR(50) NOT NULL UNIQUE
);-- 修改表添加外键
ALTER TABLE employees 
ADD CONSTRAINT fk_dept 
FOREIGN KEY (department_id) REFERENCES departments(dept_id) 
ON DELETE CASCADE;-- 创建索引加速查询
CREATE INDEX idx_hire_date ON employees(hire_date DESC);-- 删除旧表
DROP TABLE IF EXISTS temp_employees;

熟练掌握 DDL 是数据库管理的核心技能,合理设计表结构和约束能大幅提升数据质量和查询效率。

http://www.lqws.cn/news/572203.html

相关文章:

  • 机器学习-02(深度学习的基本概念)
  • 智能新纪元:大语言模型如何重塑电商“人货场”经典范式
  • 【QT】信号和槽(1) 使用 || 定义
  • 深入学习 GORM:记录插入与数据检索
  • MySQL技巧
  • 【ad-hoc】# P12414 「YLLOI-R1-T3」一路向北|普及+
  • Requests源码分析:面试考察角度梳理
  • MySQL 架构
  • 理解 Confluent Schema Registry:Kafka 生态中的结构化数据守护者
  • 第10.4篇 使用预训练的目标检测网络
  • 学习使用Visual Studio分析.net内存转储文件的基本用法
  • C# 委托(调用带引用参数的委托)
  • 计算机组成原理与体系结构-实验四 微程序控制器 (Proteus 8.15)
  • 【硬核数学】3. AI如何应对不确定性?概率论为模型注入“灵魂”《从零构建机器学习、深度学习到LLM的数学认知》
  • 【HuggingFace】模型下载至本地访问
  • SpringMVC实战:从配置到JSON处理全解析
  • 开源免费计划工具:帮你高效规划每一天
  • UE5 Grid3D 学习笔记
  • 什么是IPFS(InterPlanetary File System,星际文件系统)
  • c# 在sql server 数据库中批插入数据
  • C++ 格式化输入输出
  • 「Java案例」输出24个希腊字母
  • 计算机组成原理与体系结构-实验一 进位加法器(Proteus 8.15)
  • Linux下的调试器-gdb(16)
  • 信息安全与网络安全---引言
  • 矩阵的定义和运算 线性代数
  • 设计模式 | 组合模式
  • VMware设置虚拟机为固定IP
  • Transformer结构与代码实现详解
  • redisson看门狗实现原理