数据库基本操作(DDL)
查看所有数据库
SHOW DATABASES;
创建数据库
-- 直接创建(若数据库已存在会报错)
CREATE DATABASE 数据库名;
-- 推荐:判断不存在时再创建
CREATE DATABASE IF NOT EXISTS 数据库名;
示例:创建名为test_db
的数据库
CREATE DATABASE IF NOT EXISTS test_db;
删除数据库
-- 直接删除(若数据库不存在会报错)
DROP DATABASE 数据库名;
-- 推荐:判断存在时再删除
DROP DATABASE IF EXISTS 数据库名;
数据存储位置
MySQL 数据库默认存储在安装目录的data
文件夹下,路径为{MySQL安装目录}/data/{数据库名}/
,每个数据库对应一个独立文件夹。
MySQL 数据类型(选对类型提升性能)
选择合适的数据类型能减少空间浪费、提升查询效率,以下是常用类型分类:
数值类型
类型名称 | 说明 | 存储需求 | 适用场景 |
---|---|---|---|
TINYINT | 小整数 | 1 字节 | 状态值(0/1)、性别 |
SMALLINT | 较小整数 | 2 字节 | 数量(0-65535) |
MEDIUMINT | 中等整数 | 3 字节 | 较大数量(如商品库存) |
INT(INTEGER) | 普通整数 | 4 字节 | ID、年龄、数量 |
BIGINT | 大整数 | 8 字节 | 超大数值(如订单号) |
FLOAT | 单精度浮点数 | 4 字节 | 精度要求不高的小数 |
DOUBLE | 双精度浮点数 | 8 字节 | 高精度小数(如坐标) |
DECIMAL(M,D) | 定点数 | M+2 字节 | 金额(精确到分) |
日期 / 时间类型
类型名称 | 格式 | 范围 | 存储需求 | 适用场景 |
---|---|---|---|---|
YEAR | YYYY | 1901~2155 | 1 字节 | 年份(如出生年) |
TIME | HH:MM:SS | -838:59:59~838:59:59 | 3 字节 | 时间间隔(如时长) |
DATE | YYYY-MM-DD | 1000-01-01~9999-12-03 | 3 字节 | 日期(如生日) |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00~9999-12-31 23:59:59 | 8 字节 | 记录时间(如订单时间) |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01~2040-01-19 03:14:07 | 4 字节 | 自动记录时间(如创建时间) |
字符串类型
类型名称 | 说明 | 存储需求 | 适用场景 |
---|---|---|---|
CHAR(M) | 固定长度字符串 | M 字节 | 短固定长度文本(如手机号) |
VARCHAR(M) | 可变长度字符串 | L+1 字节(L≤M) | 变长文本(如用户名、邮箱) |
TEXT | 小文本 | L+2 字节 | 短文本(如描述) |
MEDIUMTEXT | 中等文本 | L+3 字节 | 中等文本(如文章内容) |
LONGTEXT | 大文本 | L+4 字节 | 长文本(如日志) |
ENUM | 枚举类型 | 1 或 2 字节 | 固定选项(如性别:男 / 女) |
SET | 集合类型 | 1-8 字节 | 多选选项(如爱好) |
表的约束(保证数据合法性)
约束是数据库的 “质检员”,用于防止无效数据进入表中,常见类型:
- 主键约束(PRIMARY KEY):唯一标识一条记录,非空且唯一(一张表只能有一个主键)。
id INT PRIMARY KEY -- 例如用户ID
- 非空约束(NOT NULL):字段必须填写,不能为
NULL
。
email VARCHAR(100) NOT NULL -- 邮箱必须填写
- 唯一约束(UNIQUE):字段值不能重复(允许
NULL
,但NULL
只允许出现一次)。
username VARCHAR(50) UNIQUE -- 用户名不能重复
- 外键约束(FOREIGN KEY):关联两张表,确保表间数据关系一致(如订单表的
user_id
关联用户表的id
)。
user_id INT,
FOREIGN KEY(user_id) REFERENCES users(id) -- 关联users表的id字段
- 默认值约束(DEFAULT):字段未填写时自动使用默认值。
status VARCHAR(10) DEFAULT 'active' -- 状态默认值为“active”
- 检查约束(CHECK):限制字段值范围。
age INT CHECK(age >= 18) -- 年龄必须≥18
表的创建与修改(DDL)
创建表
CREATE TABLE 表名 (
列名1 数据类型 约束条件,
列名2 数据类型 约束条件,
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 引擎用InnoDB,字符集utf8
示例:创建users
表存储用户信息
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键
username VARCHAR(50) NOT NULL UNIQUE, -- 用户名非空且唯一
email VARCHAR(100) NOT NULL, -- 邮箱非空
age INT CHECK(age >= 18), -- 年龄≥18
register_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 注册时间默认当前时间
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
删除表
DROP TABLE 表名; -- 删除表结构和所有数据(谨慎操作!)
修改表结构
- 添加字段:
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 约束;
-- 示例:给users表添加phone字段
ALTER TABLE users ADD COLUMN phone VARCHAR(20) UNIQUE;
- 修改字段类型:
ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型;
-- 示例:将age字段改为SMALLINT
ALTER TABLE users MODIFY COLUMN age SMALLINT;
- 删除字段:
ALTER TABLE 表名 DROP COLUMN 列名;
-- 示例:删除phone字段
ALTER TABLE users DROP COLUMN phone;
- 修改字段名:
ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 新数据类型;
-- 示例:将username改为user_name
ALTER TABLE users CHANGE COLUMN username user_name VARCHAR(50);
- 修改表名:
RENAME TABLE 旧表名 TO 新表名;
-- 示例:将users改为user_info
RENAME TABLE users TO user_info;