作者: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 语句:
创建一个名为
my_lab
的数据库。create database if not exists my_lab;
切换到
my_lab
数据库。use my_lab;
创建一个名为
gadgets
的表,包含两列:gadget_name
(类型varchar(100)
) 和release_year
(类型int
)。create table if not exists gadgets ( gadget_name varchar(100), release_year int );
查看
gadgets
表的结构。desc gadgets;
向
gadgets
表添加一个名为manufacturer
的列,类型为varchar(80)
。alter table gadgets add column manufacturer varchar(80);
查看
gadgets
表的新结构。desc gadgets;
修改
gadgets
表的release_year
列,将其数据类型改为varchar(4)
。alter table gadgets modify column release_year varchar(4);
将
gadgets
表的gadget_name
列重命名为device_name
,类型保持varchar(100)
不变。alter table gadgets change column gadget_name device_name varchar(100);
查看
gadgets
表最终的结构。desc gadgets;
将
gadgets
表重命名为electronics
。alter table gadgets rename to electronics;
显示当前数据库中的所有表,确认表名已更改。
show tables;
删除
electronics
表。drop table if exists electronics;
(可选,谨慎操作) 删除
my_lab
数据库。-- drop database if exists my_lab;