【MySQL】入门篇—SQL基础:数据定义语言(DDL)

数据定义语言(DDL,Data Definition Language)是SQL(结构化查询语言)的一部分,主要用于定义和管理数据库的结构。

DDL允许用户创建、修改和删除数据库及其对象(如表、索引、视图等)。以下是一些DDL在实际应用中的重要性和场景:

  • 创建数据库和表:在应用程序开发初期,需要设计和创建数据库结构以存储数据。例如,电商平台需要创建用户、商品和订单等表来管理数据。

  • 修改数据库结构:随着业务需求的变化,可能需要调整数据库结构,比如添加新字段、修改数据类型或删除不再需要的列。

  • 删除数据库和表:在不再需要某个数据库或表时,可以将其删除以释放资源。例如,当一个项目结束时,相关的测试数据库可能会被删除。

掌握DDL的基本操作是数据库管理员和开发者的基本技能。接下来,我们将通过具体示例详细介绍DDL的主要命令:创建(CREATE)、修改(ALTER)和删除(DROP)。

1. 创建数据库和表

1.1 创建数据库

创建数据库是指在数据库管理系统中创建一个新的数据库实例。每个数据库可以包含多个表和其他对象。创建数据库的语法相对简单,通常只需要指定数据库的名称。

示例:创建数据库

复制代码
-- 创建一个名为 'my_database' 的数据库
CREATE DATABASE my_database;

-- 选择使用该数据库
USE my_database;
  • CREATE DATABASE my_database;:此命令创建一个名为my_database的数据库。数据库是存储数据的容器,通常一个应用程序会有一个或多个数据库。

  • USE my_database;:选择当前使用的数据库。之后的所有操作(如创建表、插入数据等)都将在my_database中进行。

1.2 创建表

创建表是指在数据库中定义一个新的数据结构,用于存储特定类型的数据。每个表由行和列组成,行表示记录,列表示属性。表的设计需要考虑数据的完整性和约束条件。

示例:创建用户表

复制代码
-- 创建一个名为 'users' 的表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,  -- 用户ID,主键,自动递增
    username VARCHAR(50) NOT NULL,      -- 用户名,非空
    email VARCHAR(100) NOT NULL UNIQUE   -- 邮箱,非空且唯一
);
  • CREATE TABLE users (...):创建一个名为users的表。

  • id INT PRIMARY KEY AUTO_INCREMENT:定义一个名为id的列,数据类型为整数(INT),作为主键并自动递增。主键确保每条记录的唯一性。

  • username VARCHAR(50) NOT NULL:定义一个名为username的列,数据类型为变长字符串,最大长度为50,且不能为空(NOT NULL)。

  • email VARCHAR(100) NOT NULL UNIQUE:定义一个名为email的列,数据类型为变长字符串,最大长度为100,且不能为空且唯一(UNIQUE),确保没有重复的邮箱地址。

2. 修改数据库和表

2.1 修改表结构

修改表结构是指对已存在的表进行更改,以适应新的业务需求。这可能包括添加新列、修改现有列的属性或删除不再需要的列。

示例:向表中添加新列

复制代码
-- 向 'users' 表中添加一个新列 'created_at'
ALTER TABLE users ADD created_at DATETIME DEFAULT CURRENT_TIMESTAMP;
  • ALTER TABLE users:指定要修改的表为users

  • ADD created_at DATETIME DEFAULT CURRENT_TIMESTAMP:添加一个名为created_at的新列,数据类型为日期时间(DATETIME),默认值为当前时间戳(CURRENT_TIMESTAMP)。这个列用于记录用户创建的时间。

2.2 修改现有列

修改现有列是指更改表中已存在列的定义,例如改变数据类型或约束条件。这通常是在业务需求变化时进行的调整。

示例:修改列的数据类型

复制代码
-- 修改 'username' 列的长度
ALTER TABLE users MODIFY username VARCHAR(100) NOT NULL;
  • MODIFY username VARCHAR(100) NOT NULL:将username列的数据类型修改为最大长度100的变长字符串,并保持非空约束。这种修改可能是因为我们希望允许更长的用户名。
2.3 删除列

删除列是指从表中移除一个不再需要的列。这通常是在数据结构优化或业务需求变化时进行的。

示例:从表中删除列

复制代码
-- 从 'users' 表中删除 'created_at' 列
ALTER TABLE users DROP COLUMN created_at;
  • DROP COLUMN created_at:从users表中删除名为created_at的列。如果我们不再需要记录用户创建时间,可以使用此命令进行删除。

3. 删除数据库和表

3.1 删除表

删除表是指从数据库中完全移除一个表及其所有数据。此操作是不可逆的,执行后无法恢复。

示例:删除表

复制代码
-- 删除 'users' 表
DROP TABLE users;
  • DROP TABLE users;:删除名为users的表及其所有数据。此操作不可逆,执行后无法恢复,因此在执行之前应确保该表的数据不再需要。
3.2 删除数据库

删除数据库是指从数据库管理系统中移除一个数据库及其所有表和数据。此操作也不可逆,需谨慎使用。

示例:删除数据库

复制代码
-- 删除 'my_database' 数据库
DROP DATABASE my_database;
  • DROP DATABASE my_database;:删除名为my_database的数据库及其所有表和数据。删除数据库会清空所有数据,因此需谨慎操作。

结论

数据定义语言(DDL)是管理数据库结构的关键工具。通过创建、修改和删除数据库及其对象,开发者和数据库管理员能够灵活地设计和维护数据存储结构。掌握DDL的基本命令对于有效地管理和优化数据库至关重要。

相关推荐
JavaGuide3 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
怒放吧德德6 小时前
MySQL篇:MySQL主从集群同步延迟问题
后端·mysql·面试
数据智能老司机7 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
Eip不易也不e8 小时前
教程之同时安装两个版本的 mysql
mysql
数据智能老司机8 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿8 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
Kagol8 小时前
macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库
redis·后端·mysql
无名之逆8 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s9123601018 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机8 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构