【掌握 DDL】:SQL 中的数据库与表管理

掌握 DDL:SQL 中的数据库与表管理

掌握 DDL:SQL 中的数据库与表管理

数据定义语言(DDL) 是 SQL 的一个子集,用于定义和管理数据库结构,包括数据库和表。本文详细介绍了用于创建、查看、修改和删除数据库及表的基本 DDL 命令,附带实用示例和最佳实践。


  1. [数据库 DDL](#数据库 DDL)
  2. [表 DDL](#表 DDL)

数据库 DDL

创建数据库

使用 CREATE DATABASE 命令创建数据库:

sql 复制代码
CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET charset] [COLLATE collation];
  • db_name:数据库名称。
  • [IF NOT EXISTS]:可选,防止数据库已存在时出错。
  • CHARACTER SET:指定字符编码(如 utf8)。
  • COLLATE:定义字符串比较的校验规则(如 utf8_general_ci)。

示例 :创建一个名为 db1 的数据库,字符集为 utf8,校验规则为 utf8_general_ci:

sql 复制代码
CREATE DATABASE IF NOT EXISTS db1 CHARACTER SET utf8 COLLATE utf8_general_ci;

查看数据库

查看所有数据库
sql 复制代码
SHOW DATABASES;
查看数据库创建语句
sql 复制代码
SHOW CREATE DATABASE db_name [\G];
  • \G:MySQL 客户端选项,以垂直格式显示结果,便于阅读复杂输出。

进入数据库

操作表之前,需进入目标数据库:

sql 复制代码
USE db_name;

删除数据库

sql 复制代码
DROP DATABASE [IF EXISTS] db_name;
  • [IF EXISTS]:可选,防止删除不存在的数据库时出错。

备份数据库

备份

在终端执行以下命令备份数据库:

bash 复制代码
mysqldump -P3306 -u root -p密码 -B db_name > backup_file_path
  • -P3306:指定 MySQL 端口。
  • -u root:用户名。
  • -p密码:密码(无空格)。
  • -B:备份整个数据库。
  • >:将备份内容重定向到指定文件。

示例 :备份 db1 到 /backup/db1.sql:

bash 复制代码
mysqldump -P3306 -u root -p123456 -B db1 > /backup/db1.sql

注意:

  • 不指定文件路径,备份内容仅显示在屏幕上。
  • 可备份特定表:mysqldump -P3306 -u root -p密码 db_name table1 table2 > backup_file_path
  • 可备份多个数据库:mysqldump -P3306 -u root -p密码 -B db_name1 db_name2 > backup_file_path

备份的本质就是保存历史的sql命令:

恢复

在 MySQL 中执行以下命令恢复数据库:

sql 复制代码
SOURCE backup_file_path;

示例 :恢复 /backup/db1.sql:

sql 复制代码
SOURCE /backup/db1.sql;

查看数据库连接

sql 复制代码
SHOW PROCESSLIST;

显示当前连接到 MySQL 服务器的所有线程(会话)状态。每个客户端连接对应一个线程。如果发现异常用户连接,可能表示数据库被入侵,需立即停止 MySQL 服务(mysqld)。

深入理解数据库创建与删除

  1. 创建数据库 :在 /var/lib/mysql 目录下创建以 db_name 命名的目录。

  2. 删除数据库 :从 /var/lib/mysql 目录删除以 db_name 命名的目录。

警告 :不建议直接在 /var/lib/mysql 目录操作数据库目录,原因如下:

  • 数据一致性:绕过存储引擎,可能导致数据不一致。
  • 权限问题:破坏 MySQL 文件权限设置。
  • 元数据问题:MySQL 未收到删除通知,可能引发错误。
  • 备份风险:无法通过 MySQL 工具进行安全备份。
  • 事务问题:未完成的事务无法正确处理。

推荐使用 MySQL 提供的 DDL 命令操作数据库,确保操作安全。

数据库字符集与校验规则

  • 字符集(CHARACTER SET) :定义数据存储的编码格式(如 utf8)。
  • 校验规则(COLLATE) :定义字符串比较和排序规则(如 utf8_general_ci)。

未指定时,数据库继承 MySQL 配置文件中的默认设置。


表 DLL

创建表

sql 复制代码
CREATE TABLE table_name (
    column_name1 datatype [constraints] [COMMENT 'description'],
    column_name2 datatype [constraints] [COMMENT 'description'],
    ...
    [PRIMARY KEY (column_name)]
) [CHARACTER SET charset] [COLLATE collation] [ENGINE engine] [COMMENT 'table_description'];
  • table_name:表名。
  • column_name:列名。
  • datatype:列数据类型(如 INT, VARCHAR)。
  • constraints:约束(如 NOT NULL, UNIQUE)。
  • CHARACTER SET / COLLATE:表级字符集和校验规则,未指定时继承数据库设置。
  • ENGINE:存储引擎(如 InnoDB, MyISAM)。

示例 :创建 students 表:

sql 复制代码
CREATE TABLE students (
    student_id INT AUTO_INCREMENT COMMENT '学生唯一标识符',
    first_name VARCHAR(50) NOT NULL COMMENT '学生的姓',
    last_name VARCHAR(50) NOT NULL COMMENT '学生的名',
    date_of_birth DATE COMMENT '出生日期',
    enrollment_date DATE COMMENT '入学日期',
    major VARCHAR(100) COMMENT '专业名称',
    email VARCHAR(100) UNIQUE COMMENT '电子邮件地址,必须唯一',
    PRIMARY KEY (student_id)
) COMMENT='存储学生信息的表格';

查看表详情

sql 复制代码
DESC table_name;

显示表结构,包括列名、数据类型、约束等。

查看表创建语句
sql 复制代码
SHOW CREATE TABLE table_name \G;

修改表

使用 ALTER TABLE 命令修改表结构:

sql 复制代码
ALTER TABLE table_name
    [operation1],
    [operation2],
    ...;
1. 添加列
sql 复制代码
ALTER TABLE students
ADD COLUMN phone_number VARCHAR(15) COMMENT '学生联系电话';
2. 修改列

使用 MODIFY COLUMN 修改列定义:

sql 复制代码
ALTER TABLE students
MODIFY COLUMN email VARCHAR(120) COMMENT '更新后的电子邮件地址';
3. 删除列
sql 复制代码
ALTER TABLE students
DROP COLUMN phone_number;
4. 修改存储引擎
sql 复制代码
ALTER TABLE students
ENGINE = MyISAM;
5. 重命名表
sql 复制代码
ALTER TABLE students
RENAME TO stu;

注意:修改表结构时,建议先备份数据,特别是在生产环境中。

删除表

sql 复制代码
DROP TABLE [IF EXISTS] table_name [, table_name2, ...] [RESTRICT | CASCADE];
  • [IF EXISTS]:防止删除不存在的表时出错。
  • RESTRICT / CASCADE:控制外键约束行为(视存储引擎支持)。

结论

DDL 命令是数据库管理的核心工具,涵盖了数据库和表的创建、修改、查看和删除等操作。通过本文提供的语法和示例,您可以轻松掌握这些命令,并在实际项目中安全、高效地管理数据库结构。始终记得在操作前备份数据,并使用 MySQL 提供的命令而非直接操作文件系统,以确保数据一致性和安全性。

相关推荐
2301_32241428042 分钟前
基于web的校园失物招领管理系统59695-计算机毕设 原创(免费领源码+部署教程+开发环境)
mysql·nginx·php·apache·thinkphp·phpstudy·wampserver
SelectDB技术团队6 分钟前
Apache Doris 基于 Lance 的向量检索深度解析
数据库·数据仓库·数据分析·湖仓一体·apache doris·lakehouse·多模湖仓
这个DBA有点耶21 分钟前
从INDEX到JOIN_ORDER:MySQL 8.0 Hint语法体系与五类实战场景
数据库·mysql·架构
数字新视界25 分钟前
机房动环监控助力智能管理
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
梅菲塔亚30 分钟前
博客_Redis入门到实战
数据库·redis·缓存
abcyuu34 分钟前
用友 U8 Cloud 生产制造模块深度解析:从 BOM 建立到成本核算的技术实现
前端·数据库·制造
夜雪一千35 分钟前
MySQL 的ID用什么数据类型更好?主键ID选型实战
数据库·mysql
蓝胖的四次元口袋42 分钟前
Redis 知识梳理(3)
数据库·redis·缓存
jnrjian1 小时前
Oracle PG data type 数据类型转化
oracle
一铭111991 小时前
海豹办公 1.9.15 跨端办公软件实践 文档兼容 Access 数据库与移动 WebView 排错
android·数据库·electron·开源软件·access