一、数据库和表的基本操作 DDL

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 在使用 MySQL 做项目或写业务逻辑时,离不开对数据库和数据表的基本操作。我们这次从创建数据库讲起,一步步带你掌握如何新建表、查看表结构、修改字段、重命名、删除等常用命令。每一个知识点都有示例代码可直接上手,还准备了一套完整的动手练习,帮助你把概念变成熟练技能。如果你刚入门 SQL,或者想系统梳理一遍 DDL 基础,这篇会是不错的起点。

作者:IvanCodes
日期:2025年6月3日

核心目标: 学习如何创建、修改和删除数据库及数据表的基本结构。

一、 连接与选择数据库
  • show databases;
    作用: 列出 mysql 服务器上所有可见的数据库。
    语法:

    show databases;
    
  • use database_name;
    作用: 选择一个数据库作为后续操作的目标。在操作表之前通常需要先执行此命令。
    语法:

    use my_database; -- 将 'my_database' 替换为实际数据库名
    
二、 数据库操作
  • create database ...;
    作用: 创建一个新的数据库。
    基本语法:

    create database [if not exists] database_name;
    
    • 选项说明:
      • if not exists:可选。如果数据库已存在,则命令不会报错。推荐加上。
    • 示例:
      create database if not exists company_db;
      create database test_db;
      
  • drop database ...;
    作用: 删除一个已存在的数据库及其包含的所有表。
    基本语法:

    drop database [if exists] database_name;
    
    • 选项说明:
      • if exists:可选。如果数据库不存在,则命令不会报错。
    • !!! 警告:此操作将永久删除数据库及其所有内容,无法恢复!请极其谨慎操作 !!!
    • 示例:
      drop database if exists temp_db;
      drop database old_project_db;
      
  • alter database ...;
    作用: 修改数据库的某些属性(例如默认字符集,此处暂不详述)。
    基本语法: (了解即可,初期较少直接修改)

    alter database database_name [修改选项];
    
    • 示例: (仅作语法展示)
      -- 这是一个修改字符集的例子,具体选项后续讲解
      -- alter database company_db character set utf8mb4;
      
三、 数据表操作
  • show tables;
    作用: 列出当前选定数据库 (use database_name;) 中的所有表。
    语法:

    show tables; -- 必须先 use 一个数据库
    
  • desc table_name;describe table_name;
    作用: 显示指定表的结构信息,主要是列名 (field) 和数据类型 (type)。
    语法:

    desc employees;
    -- 或者
    describe products;
    
  • create table ...;
    作用: 在当前数据库中创建一个新表,并定义其包含的列和列的数据类型。
    基本语法:

    create table [if not exists] table_name (
    column1_name data_type [comment ''],
    column2_name data_type [comment ''],
    ...
    columnN_name data_type [comment '']
    ) comment '';
    
    • 选项说明:
      • if not exists:可选。如果表已存在,则命令不会报错。推荐加上。
    • 常用数据类型 (data_type) 简介:




类型分类
数据类型
说明




数值型
INT
整数,常用,范围约 ±21亿


TINYINT
小整数,范围 -128~127 或 0~255


BIGINT
大整数,范围更大(64位)


DECIMAL
精确小数,适合财务计算


FLOAT
单精度浮点数,适合非精确计算


DOUBLE
双精度浮点数,精度更高


字符串型
CHAR(n)
定长字符串,最大255字节


VARCHAR(n)
可变长字符串,最大65535字节(取决于编码)


TEXT
长文本,最多65,535字节


ENUM
枚举类型,从预设值中选择


时间日期型
DATE
日期(YYYY-MM-DD)


DATETIME
日期+时间(精确到秒)


TIMESTAMP
自动存储当前时间戳,适合记录更新时间


布尔型
BOOLEAN
实际上是 TINYINT(1),0 为假,非0 为真


二进制型
BLOB
二进制大对象,适合存储图片、文件



示例:
-- 创建一个简单的员工表
create table if not exists employees (
employee_id int comment '员工ID',
first_name varchar(50) comment '姓氏',
last_name varchar(50) comment '姓名',
hire_date date comment '入职日期'
);

-- 创建一个简单的产品表
create table if not exists products (
product_code varchar(20),
product_name varchar(100),
price decimal(10, 2)
);
  • drop table ...;
    作用: 删除一个已存在的表及其所有数据。
    基本语法:

    drop table [if exists] table_name;
    
    • 选项说明:
      • if exists:可选。如果表不存在,则命令不会报错。
    • !!! 警告:此操作将永久删除表结构和所有数据,无法恢复!请谨慎操作 !!!
    • 示例:
      drop table if exists temporary_users;
      drop table old_products;
      
  • alter table ...;
    作用: 修改现有表的结构。
    常用操作:

添加列 (add column):

alter table table_name add column column_name data_type;

示例:

-- 给 employees 表添加 email 列
alter table employees add column email varchar(100);
-- 给 products 表添加 description 列
alter table products add column description text;
  • 删除列 (drop column):
    alter table table_name drop column column_name;
    
    示例:
    -- 从 employees 表删除 phone_number 列 (假设它存在)
    -- alter table employees drop column phone_number;
    -- 从 products 表删除 obsolete_flag 列 (假设它存在)
    -- alter table products drop column obsolete_flag;
    
  • 修改列的数据类型 (modify column):
    alter table table_name modify column column_name new_data_type;
    
    示例:
    -- 将 employees 表的 first_name 长度增加到 100
    alter table employees modify column first_name varchar(100);
    -- 将 products 表的 price 类型改为允许更大范围
    alter table products modify column price decimal(12, 2);
    
  • 修改列名和数据类型 (change column): (可以只改名,类型保持不变;或同时改名和类型)
    alter table table_name change column old_column_name new_column_name new_data_type;
    
    示例:
    -- 将 employees 表的 hire_date 列改名为 start_date,类型不变
    alter table employees change column hire_date start_date date;
    -- 将 products 表的 product_code 列改名为 item_sku,并改为 varchar(30)
    alter table products change column product_code item_sku varchar(30);
    
  • 重命名表 (rename to):
    alter table old_table_name rename to new_table_name;
    
    示例:
    -- 将 employees 表重命名为 staff
    alter table employees rename to staff;
    -- 将 products 表重命名为 items
    alter table products rename to items;
    

练习题

请按顺序执行以下 SQL 语句:

  1. 创建一个名为 my_lab 的数据库。

    create database if not exists my_lab;
    
  2. 切换到 my_lab 数据库。

    use my_lab;
    
  3. 创建一个名为 gadgets 的表,包含两列:gadget_name (类型 varchar(100)) 和 release_year (类型 int)。

    create table if not exists gadgets (
    gadget_name varchar(100),
    release_year int
    );
    
  4. 查看 gadgets 表的结构。

    desc gadgets;
    
  5. gadgets 表添加一个名为 manufacturer 的列,类型为 varchar(80)

    alter table gadgets add column manufacturer varchar(80);
    
  6. 查看 gadgets 表的新结构。

    desc gadgets;
    
  7. 修改 gadgets 表的 release_year 列,将其数据类型改为 varchar(4)

    alter table gadgets modify column release_year varchar(4);
    
  8. gadgets 表的 gadget_name 列重命名为 device_name,类型保持 varchar(100) 不变。

    alter table gadgets change column gadget_name device_name varchar(100);
    
  9. 查看 gadgets 表最终的结构。

    desc gadgets;
    
  10. gadgets 表重命名为 electronics

    alter table gadgets rename to electronics;
    
  11. 显示当前数据库中的所有表,确认表名已更改。

    show tables;
    
  12. 删除 electronics 表。

    drop table if exists electronics;
    
  13. (可选,谨慎操作) 删除 my_lab 数据库。

    -- drop database if exists my_lab;
    
目录
相关文章
|
SQL 关系型数据库 MySQL
数据库开发之SQL简介以及DDL的详细解析
数据库开发之SQL简介以及DDL的详细解析
146 0
|
SQL 存储 关系型数据库
day01:数据库DDL
day01:数据库DDL
107 0
|
3月前
|
SQL 人工智能 数据可视化
16.1k star! 只需要DDL就能一键生成数据库关系图!开源神器ChartDB让你的数据结构"看得见"
ChartDB是一款开源的数据库可视化神器,通过一句智能查询就能自动生成专业的数据库关系图。无需安装客户端、不用暴露数据库密码,打开网页就能完成从数据建模到迁移的全流程操作,堪称开发者的"数据库透视镜"。
560 67
|
SQL 存储 关系型数据库
【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句
【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句
320 0
|
11月前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
177 6
|
11月前
|
SQL 存储 关系型数据库
|
SQL 存储 数据库
数据库语言:DDL与DML详解
数据库语言:DDL与DML详解
3788 1
|
SQL 关系型数据库 MySQL
MYSQL————DDL方法使用(包含在数据库,以及具体数据库表格的一些操纵)
MYSQL————DDL方法使用(包含在数据库,以及具体数据库表格的一些操纵)
|
SQL 关系型数据库 MySQL
MySQL数据库子查询练习——DDL与DML语句(包括引入视频)
MySQL数据库子查询练习——DDL与DML语句(包括引入视频)
132 1
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
135 1

热门文章

最新文章